diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-08-14 16:18:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-14 16:18:06 +0200 |
commit | 24f36fb180fad44a1e48d13f48a85b15160ad481 (patch) | |
tree | e9b833702e798f82dad374c246fba6e52f676f6e /src/network | |
parent | 87915c1c981a9eb10d8d8c83ed16f6c9451ffa0d (diff) | |
parent | 3dc2e7af5fc9d045416f8f6dc3f76799af7eb204 (diff) | |
download | systemd-24f36fb180fad44a1e48d13f48a85b15160ad481.tar.gz |
Merge pull request #13302 from yuwata/network-set-put-fixes
network: fixes related to set_put()
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-address.c | 2 | ||||
-rw-r--r-- | src/network/networkd-link.c | 6 | ||||
-rw-r--r-- | src/network/networkd-manager.c | 2 | ||||
-rw-r--r-- | src/network/networkd-route.c | 2 | ||||
-rw-r--r-- | src/network/networkd-routing-policy-rule.c | 12 |
5 files changed, 21 insertions, 3 deletions
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index a207bb0790..e6f30a2842 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -260,6 +260,8 @@ static int address_add_internal(Link *link, Set **addresses, r = set_put(*addresses, address); if (r < 0) return r; + if (r == 0) + return -EEXIST; address->link = link; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index d985057885..3749b979f9 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1948,6 +1948,8 @@ static int link_append_to_master(Link *link, NetDev *netdev) { r = set_put(master->slaves, link); if (r < 0) return r; + if (r == 0) + return 0; link_ref(link); return 0; @@ -2725,6 +2727,8 @@ int get_product_uuid_handler(sd_bus_message *m, void *userdata, sd_bus_error *re configure: while ((link = set_steal_first(manager->links_requesting_uuid))) { + link_unref(link); + r = link_configure(link); if (r < 0) link_enter_failed(link); @@ -2797,6 +2801,8 @@ static int link_configure_duid(Link *link) { r = set_put(m->duids_requesting_uuid, duid); if (r < 0) return log_oom(); + + link_ref(link); } return 0; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index cf5e211ba1..a365bcbde7 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -2039,6 +2039,8 @@ int manager_request_product_uuid(Manager *m, Link *link) { r = set_put(m->duids_requesting_uuid, duid); if (r < 0) return log_oom(); + + link_ref(link); } if (!m->bus || sd_bus_is_ready(m->bus) <= 0) { diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 8cc8080b46..8a16e9111f 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -399,6 +399,8 @@ static int route_add_internal( r = set_put(*routes, route); if (r < 0) return r; + if (r == 0) + return -EEXIST; route->link = link; diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index 31a49ed905..1864a5a376 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -209,7 +209,11 @@ int routing_policy_rule_make_local(Manager *m, RoutingPolicyRule *rule) { if (r < 0) return r; - return set_put(m->rules, rule); + r = set_put(m->rules, rule); + if (r < 0) + return r; + if (r == 0) + routing_policy_rule_free(rule); } return -ENOENT; @@ -265,6 +269,8 @@ static int routing_policy_rule_add_internal(Manager *m, Set **rules, RoutingPoli r = set_put(*rules, rule); if (r < 0) return r; + if (r == 0) + return -EEXIST; if (ret) *ret = rule; @@ -1180,8 +1186,8 @@ int routing_policy_load_rules(const char *state_file, Set **rules) { log_warning_errno(r, "Failed to add RPDB rule to saved DB, ignoring: %s", p); continue; } - - rule = NULL; + if (r > 0) + rule = NULL; } return 0; |