From 08ff6fcffb6fdfc220ebbba5dd60843a0fc71393 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 12:13:51 +0100 Subject: [PATCH 01/17] journal: context - Use _cleanup_free_ --- src/journal/journald-context.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c index 8736495a4b..577d5254c5 100644 --- a/src/journal/journald-context.c +++ b/src/journal/journald-context.c @@ -102,7 +102,7 @@ static int client_context_compare(const void *a, const void *b) { } static int client_context_new(Server *s, pid_t pid, ClientContext **ret) { - ClientContext *c; + _cleanup_free_ ClientContext *c = NULL; int r; assert(s); @@ -137,12 +137,10 @@ static int client_context_new(Server *s, pid_t pid, ClientContext **ret) { }; r = hashmap_put(s->client_contexts, PID_TO_PTR(pid), c); - if (r < 0) { - free(c); + if (r < 0) return r; - } - *ret = c; + *ret = TAKE_PTR(c); return 0; } From becee4da44bdc17b0c56f54e5559b078c0eddb88 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 12:16:34 +0100 Subject: [PATCH 02/17] journal: context - use hashmap_ensure_put --- src/journal/journald-context.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c index 577d5254c5..f67013e80c 100644 --- a/src/journal/journald-context.c +++ b/src/journal/journald-context.c @@ -109,10 +109,6 @@ static int client_context_new(Server *s, pid_t pid, ClientContext **ret) { assert(pid_is_valid(pid)); assert(ret); - r = hashmap_ensure_allocated(&s->client_contexts, NULL); - if (r < 0) - return r; - r = prioq_ensure_allocated(&s->client_contexts_lru, client_context_compare); if (r < 0) return r; @@ -136,7 +132,7 @@ static int client_context_new(Server *s, pid_t pid, ClientContext **ret) { .log_ratelimit_burst = s->ratelimit_burst, }; - r = hashmap_put(s->client_contexts, PID_TO_PTR(pid), c); + r = hashmap_ensure_put(&s->client_contexts, NULL, PID_TO_PTR(pid), c); if (r < 0) return r; From d1ce8359890486812c64311c107ecf41f0b99a43 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 13:00:35 +0100 Subject: [PATCH 03/17] network: bond - use ordered_set_ensure_put --- src/network/netdev/bond.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c index e27f36067b..cf7ca88d6f 100644 --- a/src/network/netdev/bond.c +++ b/src/network/netdev/bond.c @@ -342,10 +342,6 @@ int config_parse_arp_ip_target_address( continue; } - r = ordered_set_ensure_allocated(&b->arp_ip_targets, NULL); - if (r < 0) - return log_oom(); - if (ordered_set_size(b->arp_ip_targets) >= NETDEV_BOND_ARP_TARGETS_MAX) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Too many ARP IP targets are specified. The maximum number is %d. Ignoring assignment: %s", @@ -353,7 +349,9 @@ int config_parse_arp_ip_target_address( continue; } - r = ordered_set_put(b->arp_ip_targets, UINT32_TO_PTR(ip.in.s_addr)); + r = ordered_set_ensure_put(&b->arp_ip_targets, NULL, UINT32_TO_PTR(ip.in.s_addr)); + if (r == -ENOMEM) + return log_oom(); if (r == -EEXIST) log_syntax(unit, LOG_WARNING, filename, line, r, "Bond ARP IP target address is duplicated, ignoring assignment: %s", n); From b2cb2e82c88bc806c37f04d1bce1e888dc0438da Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 21:34:46 +0100 Subject: [PATCH 04/17] network: radv - use hashmap_ensure_put --- src/network/networkd-radv.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 4de6a21122..35bf68cd7e 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -143,11 +143,7 @@ static int route_prefix_new_static(Network *network, const char *filename, unsig prefix->network = network; prefix->section = TAKE_PTR(n); - r = hashmap_ensure_allocated(&network->route_prefixes_by_section, &network_config_hash_ops); - if (r < 0) - return r; - - r = hashmap_put(network->route_prefixes_by_section, prefix->section, prefix); + r = hashmap_ensure_put(&network->route_prefixes_by_section, &network_config_hash_ops, prefix->section, prefix); if (r < 0) return r; From 3f70f938a05e609d56bde1939473fb3ab4a4e6ec Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 13:09:23 +0100 Subject: [PATCH 05/17] network: wait-online - use hashmap_ensure_put --- src/network/wait-online/link.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/network/wait-online/link.c b/src/network/wait-online/link.c index 529fc9f22a..d0f3347617 100644 --- a/src/network/wait-online/link.c +++ b/src/network/wait-online/link.c @@ -16,14 +16,6 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) { assert(m); assert(ifindex > 0); - r = hashmap_ensure_allocated(&m->links, NULL); - if (r < 0) - return r; - - r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops); - if (r < 0) - return r; - n = strdup(ifname); if (!n) return -ENOMEM; @@ -39,11 +31,11 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) { .required_operstate = LINK_OPERSTATE_RANGE_DEFAULT, }; - r = hashmap_put(m->links_by_name, l->ifname, l); + r = hashmap_ensure_put(&m->links, NULL, INT_TO_PTR(ifindex), l); if (r < 0) return r; - r = hashmap_put(m->links, INT_TO_PTR(ifindex), l); + r = hashmap_ensure_put(&m->links_by_name, &string_hash_ops, l->ifname, l); if (r < 0) return r; From ee9ead76bb1e7c2d524f96b77518675768f70d91 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 13:10:18 +0100 Subject: [PATCH 06/17] network: wait-online - add a assert --- src/network/wait-online/link.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/wait-online/link.c b/src/network/wait-online/link.c index d0f3347617..e820a7a20f 100644 --- a/src/network/wait-online/link.c +++ b/src/network/wait-online/link.c @@ -15,6 +15,7 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) { assert(m); assert(ifindex > 0); + assert(ifname); n = strdup(ifname); if (!n) From 1d2d1654c6f8a3b4bfd6afeb9ea2fa8e08c84be9 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 13:17:20 +0100 Subject: [PATCH 07/17] varlink: use hashmap_ensure_put --- src/shared/varlink.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/shared/varlink.c b/src/shared/varlink.c index c18081e438..274709abd5 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -2391,14 +2391,13 @@ int varlink_server_bind_method(VarlinkServer *s, const char *method, VarlinkMeth if (startswith(method, "org.varlink.service.")) return log_debug_errno(SYNTHETIC_ERRNO(EEXIST), "Cannot bind server to '%s'.", method); - if (hashmap_ensure_allocated(&s->methods, &string_hash_ops) < 0) - return log_oom_debug(); - m = strdup(method); if (!m) return log_oom_debug(); - r = hashmap_put(s->methods, m, callback); + r = hashmap_ensure_put(&s->methods, &string_hash_ops, m, callback); + if (r == -ENOMEM) + return log_oom_debug(); if (r < 0) return log_debug_errno(r, "Failed to register callback: %m"); if (r > 0) From 1b5d349788cd28107b90e698d11f93d140cee5d9 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 14:05:35 +0100 Subject: [PATCH 08/17] sd-netlink: use hashmap_ensure_put --- src/libsystemd/sd-netlink/generic-netlink.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/libsystemd/sd-netlink/generic-netlink.c b/src/libsystemd/sd-netlink/generic-netlink.c index f295fa9e83..38e80d8f46 100644 --- a/src/libsystemd/sd-netlink/generic-netlink.c +++ b/src/libsystemd/sd-netlink/generic-netlink.c @@ -115,19 +115,11 @@ static int lookup_id(sd_netlink *nl, sd_genl_family family, uint16_t *id) { if (r < 0) return r; - r = hashmap_ensure_allocated(&nl->genl_family_to_nlmsg_type, NULL); + r = hashmap_ensure_put(&nl->genl_family_to_nlmsg_type, NULL, INT_TO_PTR(family), UINT_TO_PTR(u)); if (r < 0) return r; - r = hashmap_ensure_allocated(&nl->nlmsg_type_to_genl_family, NULL); - if (r < 0) - return r; - - r = hashmap_put(nl->genl_family_to_nlmsg_type, INT_TO_PTR(family), UINT_TO_PTR(u)); - if (r < 0) - return r; - - r = hashmap_put(nl->nlmsg_type_to_genl_family, UINT_TO_PTR(u), INT_TO_PTR(family)); + r = hashmap_ensure_put(&nl->nlmsg_type_to_genl_family, NULL, UINT_TO_PTR(u), INT_TO_PTR(family)); if (r < 0) return r; From f334debabbb70597e04a5f5318437e2ab6f9d22e Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 21:37:39 +0100 Subject: [PATCH 09/17] sysusers: use ordered_hashmap_ensure_put --- src/sysusers/sysusers.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 6b0acd529e..f0ec5085fc 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1298,10 +1298,6 @@ static int add_implicit(void) { if (!ordered_hashmap_get(users, *m)) { _cleanup_(item_freep) Item *j = NULL; - r = ordered_hashmap_ensure_allocated(&users, &item_hash_ops); - if (r < 0) - return log_oom(); - j = new0(Item, 1); if (!j) return log_oom(); @@ -1311,22 +1307,20 @@ static int add_implicit(void) { if (!j->name) return log_oom(); - r = ordered_hashmap_put(users, j->name, j); - if (r < 0) + r = ordered_hashmap_ensure_put(&users, &item_hash_ops, j->name, j); + if (r == -ENOMEM) return log_oom(); + if (r < 0) + return log_error_errno(r, "Failed to add implicit user '%s': %m", j->name); log_debug("Adding implicit user '%s' due to m line", j->name); - j = NULL; + TAKE_PTR(j); } if (!(ordered_hashmap_get(users, g) || ordered_hashmap_get(groups, g))) { _cleanup_(item_freep) Item *j = NULL; - r = ordered_hashmap_ensure_allocated(&groups, &item_hash_ops); - if (r < 0) - return log_oom(); - j = new0(Item, 1); if (!j) return log_oom(); @@ -1336,12 +1330,14 @@ static int add_implicit(void) { if (!j->name) return log_oom(); - r = ordered_hashmap_put(groups, j->name, j); - if (r < 0) + r = ordered_hashmap_ensure_put(&groups, &item_hash_ops, j->name, j); + if (r == -ENOMEM) return log_oom(); + if (r < 0) + return log_error_errno(r, "Failed to add implicit group '%s': %m", j->name); log_debug("Adding implicit group '%s' due to m line", j->name); - j = NULL; + TAKE_PTR(j); } } From acf56b72f26609ee5431e23d4e5bbaf7f730d236 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 21:52:58 +0100 Subject: [PATCH 10/17] core: transaction - use hashmap_ensure_put --- src/core/transaction.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/core/transaction.c b/src/core/transaction.c index ae77bae65e..d7388e2367 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -648,11 +648,7 @@ static int transaction_apply( assert(!j->transaction_prev); assert(!j->transaction_next); - r = hashmap_ensure_allocated(&m->jobs, NULL); - if (r < 0) - return r; - - r = hashmap_put(m->jobs, UINT32_TO_PTR(j->id), j); + r = hashmap_ensure_put(&m->jobs, NULL, UINT32_TO_PTR(j->id), j); if (r < 0) goto rollback; } From b5bcd738959790259fa349d1d835638cd7bd72e0 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 21:38:46 +0100 Subject: [PATCH 11/17] remount-fs: Use hashmap_ensure_put --- src/remount-fs/remount-fs.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/remount-fs/remount-fs.c b/src/remount-fs/remount-fs.c index 19f5bd0d11..9668a49dc4 100644 --- a/src/remount-fs/remount-fs.c +++ b/src/remount-fs/remount-fs.c @@ -31,17 +31,15 @@ static int track_pid(Hashmap **h, const char *path, pid_t pid) { assert(path); assert(pid_is_valid(pid)); - r = hashmap_ensure_allocated(h, NULL); - if (r < 0) - return log_oom(); - c = strdup(path); if (!c) return log_oom(); - r = hashmap_put(*h, PID_TO_PTR(pid), c); - if (r < 0) + r = hashmap_ensure_put(h, NULL, PID_TO_PTR(pid), c); + if (r == -ENOMEM) return log_oom(); + if (r < 0) + return log_error_errno(r, "Failed to store pid " PID_FMT, pid); TAKE_PTR(c); return 0; From ae4ad9df48dc50ad4a5d553f923e186665b7b031 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 19:05:05 +0100 Subject: [PATCH 12/17] resolve: link - use hashmap_ensure_put --- src/resolve/resolved-link.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index 4fa4451ab7..06c2432c0a 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -27,10 +27,6 @@ int link_new(Manager *m, Link **ret, int ifindex) { assert(m); assert(ifindex > 0); - r = hashmap_ensure_allocated(&m->links, NULL); - if (r < 0) - return r; - l = new(Link, 1); if (!l) return -ENOMEM; @@ -48,7 +44,7 @@ int link_new(Manager *m, Link **ret, int ifindex) { if (asprintf(&l->state_file, "/run/systemd/resolve/netif/%i", ifindex) < 0) return -ENOMEM; - r = hashmap_put(m->links, INT_TO_PTR(ifindex), l); + r = hashmap_ensure_put(&m->links, NULL, INT_TO_PTR(ifindex), l); if (r < 0) return r; @@ -56,7 +52,7 @@ int link_new(Manager *m, Link **ret, int ifindex) { if (ret) *ret = l; - l = NULL; + TAKE_PTR(l); return 0; } From 5088e5e79f88659eff2f99993b3e528d6d30835c Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 18:24:56 +0100 Subject: [PATCH 13/17] share: bus-unit-procs - use hashmap_ensure_put --- src/shared/bus-unit-procs.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c index 3e97be9671..b76125e551 100644 --- a/src/shared/bus-unit-procs.c +++ b/src/shared/bus-unit-procs.c @@ -104,11 +104,7 @@ static int add_process( if (r < 0) return r; - r = hashmap_ensure_allocated(&cg->pids, &trivial_hash_ops); - if (r < 0) - return r; - - return hashmap_put(cg->pids, PID_TO_PTR(pid), (void*) name); + return hashmap_ensure_put(&cg->pids, &trivial_hash_ops, PID_TO_PTR(pid), (void*) name); } static void remove_cgroup(Hashmap *cgroups, struct CGroupInfo *cg) { From 02288f3ef844792717835674dca7d7a824d7bf2f Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 18:33:40 +0100 Subject: [PATCH 14/17] network: sd-dhcp6-client - use ordered_hashmap_ensure_put --- src/libsystemd-network/sd-dhcp6-client.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 788f2e1d42..f362770c4f 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -234,11 +234,7 @@ int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client, sd_dhcp6_option * assert_return(client, -EINVAL); assert_return(v, -EINVAL); - r = ordered_hashmap_ensure_allocated(&client->vendor_options, &dhcp6_option_hash_ops); - if (r < 0) - return r; - - r = ordered_hashmap_put(client->vendor_options, v, v); + r = ordered_hashmap_ensure_put(&client->vendor_options, &dhcp6_option_hash_ops, v, v); if (r < 0) return r; @@ -567,11 +563,7 @@ int sd_dhcp6_client_add_option(sd_dhcp6_client *client, sd_dhcp6_option *v) { assert_return(client, -EINVAL); assert_return(v, -EINVAL); - r = ordered_hashmap_ensure_allocated(&client->extra_options, &dhcp6_option_hash_ops); - if (r < 0) - return r; - - r = ordered_hashmap_put(client->extra_options, UINT_TO_PTR(v->option), v); + r = ordered_hashmap_ensure_put(&client->extra_options, &dhcp6_option_hash_ops, UINT_TO_PTR(v->option), v); if (r < 0) return r; From 9b059ee0222be8393fdef5575eb78927ba4ef0a4 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 19:10:57 +0100 Subject: [PATCH 15/17] core: dbus - use set_ensure_put --- src/core/dbus.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/core/dbus.c b/src/core/dbus.c index 3e435c98ca..5db484b8de 100644 --- a/src/core/dbus.c +++ b/src/core/dbus.c @@ -679,12 +679,6 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void return 0; } - r = set_ensure_allocated(&m->private_buses, NULL); - if (r < 0) { - log_oom(); - return 0; - } - r = sd_bus_new(&bus); if (r < 0) { log_warning_errno(r, "Failed to allocate new private connection bus: %m"); @@ -752,13 +746,17 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void return 0; } - r = set_put(m->private_buses, bus); + r = set_ensure_put(&m->private_buses, NULL, bus); + if (r == -ENOMEM) { + log_oom(); + return 0; + } if (r < 0) { log_warning_errno(r, "Failed to add new connection bus to set: %m"); return 0; } - bus = NULL; + TAKE_PTR(bus); log_debug("Accepted new private connection."); From 630837065e7f22d125bdf8a7dbcce6d36b18febd Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 19:13:33 +0100 Subject: [PATCH 16/17] core: execute - use hashmap_ensure_put --- src/core/execute.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index ee5f082783..2ac9537e1b 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -6059,15 +6059,11 @@ static int exec_runtime_add( /* tmp_dir, var_tmp_dir, netns_storage_socket fds are donated on success */ - r = hashmap_ensure_allocated(&m->exec_runtime_by_id, &string_hash_ops); - if (r < 0) - return r; - r = exec_runtime_allocate(&rt, id); if (r < 0) return r; - r = hashmap_put(m->exec_runtime_by_id, rt->id, rt); + r = hashmap_ensure_put(&m->exec_runtime_by_id, &string_hash_ops, rt->id, rt); if (r < 0) return r; From df24a407a52816f74755a23c84d861a52833e5d3 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 18 Jan 2021 19:15:44 +0100 Subject: [PATCH 17/17] import: use - hashmap_ensure_put --- src/import/importd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/import/importd.c b/src/import/importd.c index b5cff4aca8..15914cc885 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -149,10 +149,6 @@ static int transfer_new(Manager *m, Transfer **ret) { if (hashmap_size(m->transfers) >= TRANSFERS_MAX) return -E2BIG; - r = hashmap_ensure_allocated(&m->transfers, &trivial_hash_ops); - if (r < 0) - return r; - t = new(Transfer, 1); if (!t) return -ENOMEM; @@ -171,7 +167,7 @@ static int transfer_new(Manager *m, Transfer **ret) { if (asprintf(&t->object_path, "/org/freedesktop/import1/transfer/_%" PRIu32, id) < 0) return -ENOMEM; - r = hashmap_put(m->transfers, UINT32_TO_PTR(id), t); + r = hashmap_ensure_put(&m->transfers, &trivial_hash_ops, UINT32_TO_PTR(id), t); if (r < 0) return r;