chiark / gitweb /
networkd: netdev - take ref immediately after calling out
[elogind.git] / src / network / networkd-address.c
index 9c3e0e33765ab75f345a7e1da9f737f9d96b6b72..1ba210831661aa946c7f33141291cbb9e61b04a1 100644 (file)
@@ -144,6 +144,8 @@ int address_drop(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
@@ -225,13 +227,15 @@ int address_update(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
 static int address_acquire(Link *link, Address *original, Address **ret) {
         union in_addr_union in_addr = {};
         struct in_addr broadcast = {};
-        Address *na = NULL;
+        _cleanup_address_free_ Address *na = NULL;
         int r;
 
         assert(link);
@@ -274,11 +278,8 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
 
         if (original->label) {
                 na->label = strdup(original->label);
-
-                if (!na->label) {
-                        free(na);
+                if (!na->label)
                         return -ENOMEM;
-                }
         }
 
         na->broadcast = broadcast;
@@ -287,6 +288,8 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
         LIST_PREPEND(addresses, link->pool_addresses, na);
 
         *ret = na;
+        na = NULL;
+
         return 0;
 }
 
@@ -374,6 +377,8 @@ int address_configure(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }