summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-08-14 16:18:06 +0200
committerGitHub <noreply@github.com>2019-08-14 16:18:06 +0200
commit24f36fb180fad44a1e48d13f48a85b15160ad481 (patch)
treee9b833702e798f82dad374c246fba6e52f676f6e /src/network
parent87915c1c981a9eb10d8d8c83ed16f6c9451ffa0d (diff)
parent3dc2e7af5fc9d045416f8f6dc3f76799af7eb204 (diff)
downloadsystemd-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.c2
-rw-r--r--src/network/networkd-link.c6
-rw-r--r--src/network/networkd-manager.c2
-rw-r--r--src/network/networkd-route.c2
-rw-r--r--src/network/networkd-routing-policy-rule.c12
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;