chiark / gitweb /
Fix a few return codes in error paths
[elogind.git] / src / network / networkd-manager.c
index b2cb0fab4d00cabe13b18e0e76b316baf933006b..d903d0d60ed4dc02655a7512c4573d90428b759d 100644 (file)
@@ -145,13 +145,13 @@ void manager_free(Manager *m) {
         sd_event_source_unref(m->sigint_event_source);
         sd_event_unref(m->event);
 
-        while ((network = m->networks))
-                network_free(network);
-
         while ((link = hashmap_first(m->links)))
                 link_free(link);
         hashmap_free(m->links);
 
+        while ((network = m->networks))
+                network_free(network);
+
         while ((netdev = hashmap_first(m->netdevs)))
                 netdev_free(netdev);
         hashmap_free(m->netdevs);
@@ -323,8 +323,14 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo
                 NetDev *netdev;
 
                 r = netdev_get(m, name, &netdev);
-                if (r >= 0)
+                if (r >= 0) {
                         netdev_set_ifindex(netdev, message);
+                        r = sd_rtnl_message_rewind(message);
+                        if (r < 0) {
+                                log_debug("could not rewind rtnl message");
+                                return 0;
+                        }
+                }
         }
 
         r = link_get(m, ifindex, &link);