From: Susant Sahani Date: Thu, 2 May 2019 09:52:03 +0000 (+0530) Subject: networkd: manager do not unef netlink and gennetlink early X-Git-Tag: v243~593^2~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4df6326740e1fabb356299875d154de89589211;p=platform%2Fupstream%2Fsystemd.git networkd: manager do not unef netlink and gennetlink early Because of this the fd is getting closed and we getting errors like ``` ^Ceno1: Could not send rtnetlink message: Bad file descriptor enp7s0f0: Could not send rtnetlink message: Bad file descriptor enp7s0f0: Cannot delete unreachable route for DHCPv6 delegated subnet 2a0a:...:fc::/62: Bad file descriptor Assertion '*_head == _item' failed at ../systemd/src/network/networkd-route.c:126, function route_free(). Aborting. Aborted ``` Closes one of https://github.com/systemd/systemd/issues/12452 --- diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 7d55142..047296c 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1427,7 +1427,6 @@ int manager_new(Manager **ret) { void manager_free(Manager *m) { AddressPool *pool; - Network *network; Link *link; if (!m) @@ -1435,10 +1434,6 @@ void manager_free(Manager *m) { free(m->state_file); - sd_netlink_unref(m->rtnl); - sd_netlink_unref(m->genl); - sd_resolve_unref(m->resolve); - while ((link = hashmap_first(m->dhcp6_prefixes))) manager_dhcp6_prefix_remove_all(m, link); hashmap_free(m->dhcp6_prefixes); @@ -1457,9 +1452,7 @@ void manager_free(Manager *m) { m->links = hashmap_free_with_destructor(m->links, link_unref); m->duids_requesting_uuid = set_free(m->duids_requesting_uuid); - while ((network = m->networks)) - network_unref(network); - hashmap_free(m->networks_by_name); + m->networks_by_name = hashmap_free_with_destructor(m->networks_by_name, network_unref); m->netdevs = hashmap_free_with_destructor(m->netdevs, netdev_unref); @@ -1472,6 +1465,10 @@ void manager_free(Manager *m) { m->rules_foreign = set_free_with_destructor(m->rules_foreign, routing_policy_rule_free); set_free_with_destructor(m->rules_saved, routing_policy_rule_free); + sd_netlink_unref(m->rtnl); + sd_netlink_unref(m->genl); + sd_resolve_unref(m->resolve); + sd_event_unref(m->event); sd_device_monitor_unref(m->device_monitor);