diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 532f2d7f96..533193ac93 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -736,7 +736,7 @@ static void link_enter_unmanaged(Link *link) { link_dirty(link); } -static int link_stop_clients(Link *link) { +int link_stop_clients(Link *link) { int r = 0, k; assert(link); diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index b43401afc6..1366a29924 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -171,6 +171,8 @@ int dhcp6_configure(Link *link); int dhcp6_request_address(Link *link, int ir); int dhcp6_lease_pd_prefix_lost(sd_dhcp6_client *client, Link* link); +int link_stop_clients(Link *link); + const char* link_state_to_string(LinkState s) _const_; LinkState link_state_from_string(const char *s) _pure_; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index c9579370cb..8c461a89e0 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1446,6 +1446,9 @@ void manager_free(Manager *m) { while ((link = hashmap_steal_first(m->links))) { if (link->dhcp6_client) (void) dhcp6_lease_pd_prefix_lost(link->dhcp6_client, link); + + link_stop_clients(link); + link_unref(link); }