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.
if (section_line > 0) {
route->section = n;
+ n = NULL;
r = hashmap_put(network->routes_by_section, n, route);
if (r < 0)
*ret = route;
route = NULL;
- n = NULL;
return 0;
}
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);