From: Yu Watanabe Date: Mon, 9 Sep 2024 14:55:46 +0000 (+0900) Subject: network/netdev: allow to register the same NetDev object with multiple names X-Git-Tag: v257-rc1~499^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36ca0164ab78e1ecd0fdfbede890378448c9b79e;p=thirdparty%2Fsystemd.git network/netdev: allow to register the same NetDev object with multiple names Preparation for later commits. --- diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 4ebecaac596..2c2956f4650 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -633,7 +633,11 @@ Manager* manager_free(Manager *m) { m->dhcp_pd_subnet_ids = set_free(m->dhcp_pd_subnet_ids); m->networks = ordered_hashmap_free_with_destructor(m->networks, network_unref); - m->netdevs = hashmap_free_with_destructor(m->netdevs, netdev_unref); + /* The same object may be registered with multiple names, and netdev_detach() may drop multiple + * entries. Hence, hashmap_free_with_destructor() cannot be used. */ + for (NetDev *n; (n = hashmap_first(m->netdevs)); ) + netdev_detach(n); + m->netdevs = hashmap_free(m->netdevs); m->tuntap_fds_by_name = hashmap_free(m->tuntap_fds_by_name);