]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: immediately transfer ownership of route->section
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 17 Feb 2017 14:26:10 +0000 (09:26 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 17 Feb 2017 14:28:17 +0000 (09:28 -0500)
The code was not incorrect previously, but I think it's easier to follow the
ownership (and the code is more likely to remain correct when updated later on),
if freeing of NetworkConfigSection* is immediately made the responsibility of
route_free(), so instead of relying on route_free() not freeing ->section
if adding to the network hashmap failed, make this freeing unconditional.

src/network/networkd-route.c

index 81a065dd27aec3290f21a854aae614268726815d..ca606c3d25aefad674fd8ae8c4e1b15a3a475278 100644 (file)
@@ -110,6 +110,7 @@ int route_new_static(Network *network, const char *filename, unsigned section_li
 
         if (section_line > 0) {
                 route->section = n;
+                n = NULL;
 
                 r = hashmap_put(network->routes_by_section, n, route);
                 if (r < 0)
@@ -122,7 +123,6 @@ int route_new_static(Network *network, const char *filename, unsigned section_li
 
         *ret = route;
         route = NULL;
-        n = NULL;
 
         return 0;
 }
@@ -137,12 +137,12 @@ void route_free(Route *route) {
                 assert(route->network->n_static_routes > 0);
                 route->network->n_static_routes--;
 
-                if (route->section) {
+                if (route->section)
                         hashmap_remove(route->network->routes_by_section, route->section);
-                        network_config_section_free(route->section);
-                }
         }
 
+        network_config_section_free(route->section);
+
         if (route->link) {
                 set_remove(route->link->routes, route);
                 set_remove(route->link->routes_foreign, route);