chiark / gitweb /
networkd: netdev - take ref immediately after calling out
authorTom Gundersen <teg@jklm.no>
Thu, 3 Jul 2014 07:43:31 +0000 (09:43 +0200)
committerTom Gundersen <teg@jklm.no>
Thu, 3 Jul 2014 09:00:01 +0000 (11:00 +0200)
Keeping the refcounting next to the sd_bus_call_async() makes it easier to check.

src/network/networkd-address.c
src/network/networkd-dummy.c
src/network/networkd-link.c
src/network/networkd-netdev.c
src/network/networkd-route.c

index 76febc7..1ba2108 100644 (file)
@@ -144,6 +144,8 @@ int address_drop(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
@@ -225,6 +227,8 @@ int address_update(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
@@ -373,6 +377,8 @@ int address_configure(Address *address, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
index 5232524..80fe41b 100644 (file)
@@ -112,6 +112,8 @@ int netdev_create_dummy(NetDev *netdev, sd_rtnl_message_handler_t callback) {
                 return r;
         }
 
+        netdev_ref(netdev);
+
         log_debug_netdev(netdev, "Creating dummy netdev.");
 
         netdev->state = NETDEV_STATE_CREATING;
index 660efed..14c0417 100644 (file)
@@ -436,7 +436,6 @@ static int link_set_dhcp_routes(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->route_messages ++;
         }
 
@@ -468,7 +467,6 @@ static int link_enter_set_routes(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->route_messages ++;
         }
 
@@ -503,7 +501,6 @@ static int link_enter_set_routes(Link *link) {
                                 return r;
                         }
 
-                        link_ref(link);
                         link->route_messages ++;
                 }
         }
@@ -551,7 +548,6 @@ static int link_enter_set_routes(Link *link) {
                                 return r;
                         }
 
-                        link_ref(link);
                         link->route_messages ++;
 
                         route->family = AF_INET;
@@ -566,7 +562,6 @@ static int link_enter_set_routes(Link *link) {
                                 return r;
                         }
 
-                        link_ref(link);
                         link->route_messages ++;
                 }
 
@@ -663,7 +658,6 @@ static int link_enter_set_addresses(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->addr_messages ++;
         }
 
@@ -699,7 +693,6 @@ static int link_enter_set_addresses(Link *link) {
                                 return r;
                         }
 
-                        link_ref(link);
                         link->addr_messages ++;
                 }
         }
@@ -760,7 +753,6 @@ static int link_enter_set_addresses(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->addr_messages ++;
         }
 
@@ -957,7 +949,6 @@ static int dhcp_lease_lost(Link *link) {
                                         route->dst_prefixlen = routes[i].dst_prefixlen;
 
                                         route_drop(route, link, &route_drop_handler);
-                                        link_ref(link);
                                 }
                         }
                 }
@@ -978,7 +969,6 @@ static int dhcp_lease_lost(Link *link) {
                                 route_gw->scope = RT_SCOPE_LINK;
 
                                 route_drop(route_gw, link, &route_drop_handler);
-                                link_ref(link);
                         }
 
                         r = route_new_dynamic(&route);
@@ -987,7 +977,6 @@ static int dhcp_lease_lost(Link *link) {
                                 route->in_addr.in = gateway;
 
                                 route_drop(route, link, &route_drop_handler);
-                                link_ref(link);
                         }
                 }
 
@@ -1000,7 +989,6 @@ static int dhcp_lease_lost(Link *link) {
                 address->prefixlen = prefixlen;
 
                 address_drop(address, link, &address_drop_handler);
-                link_ref(link);
         }
 
         if (link->network->dhcp_mtu) {
@@ -1267,7 +1255,6 @@ static int ipv4ll_address_update(Link *link, bool deprecate) {
                 address->broadcast.s_addr = address->in_addr.in.s_addr | htonl(0xfffffffflu >> address->prefixlen);
 
                 address_update(address, link, &address_update_handler);
-                link_ref(link);
         }
 
         return 0;
@@ -1300,7 +1287,6 @@ static int ipv4ll_address_lost(Link *link) {
                 address->scope = RT_SCOPE_LINK;
 
                 address_drop(address, link, &address_drop_handler);
-                link_ref(link);
 
                 r = route_new_dynamic(&route);
                 if (r < 0) {
@@ -1314,7 +1300,6 @@ static int ipv4ll_address_lost(Link *link) {
                 route->metrics = 99;
 
                 route_drop(route, link, &route_drop_handler);
-                link_ref(link);
         }
 
         return 0;
@@ -1810,7 +1795,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
@@ -1834,7 +1818,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
@@ -1858,7 +1841,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
@@ -1879,7 +1861,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
@@ -1900,7 +1881,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
@@ -1921,7 +1901,6 @@ static int link_enter_enslave(Link *link) {
                         return r;
                 }
 
-                link_ref(link);
                 link->enslaving ++;
         }
 
index c80e943..0861ff3 100644 (file)
@@ -184,6 +184,8 @@ static int netdev_enslave_ready(NetDev *netdev, Link* link, sd_rtnl_message_hand
                 return r;
         }
 
+        link_ref(link);
+
         log_debug_netdev(netdev, "enslaving link '%s'", link->ifname);
 
         return 0;
@@ -393,6 +395,7 @@ int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callbac
 
                 cb->callback = callback;
                 cb->link = link;
+                link_ref(link);
 
                 LIST_PREPEND(callbacks, netdev->callbacks, cb);
         }
@@ -678,8 +681,6 @@ static int netdev_load_one(Manager *manager, const char *filename) {
                 if (r < 0)
                         return r;
 
-                netdev_ref(netdev);
-
                 break;
         case NETDEV_KIND_BRIDGE:
         case NETDEV_KIND_BOND:
index d0a04ec..acfe3f0 100644 (file)
@@ -164,6 +164,8 @@ int route_drop(Route *route, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }
 
@@ -235,6 +237,8 @@ int route_configure(Route *route, Link *link,
                 return r;
         }
 
+        link_ref(link);
+
         return 0;
 }