]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: also unref IPv4 ACD clients in Address objects 17356/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Oct 2020 23:11:29 +0000 (08:11 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 14 Oct 2020 23:11:32 +0000 (08:11 +0900)
This should not change any behavior, as currently link_free_engines() is
always called after all addresses are dropped. But the function may be
used in other places in the future. So, let's also stop the clients.

src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-link.c

index 0b269a1ba1ec6066e2e4759c4221c0da892aa69d..636812b5560234b40a49185e4f0506e8233647af 100644 (file)
@@ -1449,6 +1449,15 @@ int ipv4_dad_stop(Link *link) {
         return r;
 }
 
+void ipv4_dad_unref(Link *link) {
+        Address *address;
+
+        assert(link);
+
+        SET_FOREACH(address, link->addresses)
+                address->acd = sd_ipv4acd_unref(address->acd);
+}
+
 int config_parse_broadcast(
                 const char *unit,
                 const char *filename,
index c0552979c5f3b2cf1e63adc0a9077d6cb3e0f330..0104747d9a5da713594bd29897f3053216c7dfdd 100644 (file)
@@ -65,6 +65,7 @@ int link_drop_foreign_addresses(Link *link);
 int link_serialize_addresses(Link *link, FILE *f);
 int link_deserialize_addresses(Link *link, const char *addresses);
 
+void ipv4_dad_unref(Link *link);
 int ipv4_dad_stop(Link *link);
 int ipv4_dad_update_mac(Link *link);
 
index 324128be3cf85733c861dd94ad3a1373fa70511d..4229e1f9738347dc0bbd69e571a6dca17c1253ed 100644 (file)
@@ -505,6 +505,8 @@ static void link_free_engines(Link *link) {
         link->dhcp6_lease = sd_dhcp6_lease_unref(link->dhcp6_lease);
         link->ndisc = sd_ndisc_unref(link->ndisc);
         link->radv = sd_radv_unref(link->radv);
+
+        ipv4_dad_unref(link);
 }
 
 static Link *link_free(Link *link) {