From 480a7919bce9d60b78532ff51fcdb82529df0af8 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 14:24:26 +0200 Subject: [PATCH 01/19] env-util: use _cleanup_ in strv_env_delete() --- src/basic/env-util.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 41fad1d1b9..848b727a8f 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -266,7 +266,7 @@ static bool env_entry_has_name(const char *entry, const char *name) { char **strv_env_delete(char **x, size_t n_lists, ...) { size_t n, i = 0; - char **r; + _cleanup_strv_free_ char **r = NULL; va_list ap; /* Deletes every entry from x that is mentioned in the other @@ -291,10 +291,8 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { va_end(ap); r[i] = strdup(*k); - if (!r[i]) { - strv_free(r); + if (!r[i]) return NULL; - } i++; continue; @@ -307,7 +305,7 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { assert(i <= n); - return r; + return TAKE_PTR(r); } char **strv_env_unset(char **l, const char *p) { From 5013d6def39802297972d63394f05693723e4b91 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 27 Apr 2023 21:10:35 +0200 Subject: [PATCH 02/19] env-util: rename variable --- src/basic/env-util.c | 52 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 848b727a8f..e3ae1a9663 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -136,20 +136,20 @@ bool strv_env_name_or_assignment_is_valid(char **l) { return true; } -static int env_append(char **r, char ***k, char **a) { - assert(r); +static int env_append(char **e, char ***k, char **a) { + assert(e); assert(k); - assert(*k >= r); + assert(*k >= e); if (!a) return 0; - /* Expects the following arguments: 'r' shall point to the beginning of an strv we are going to append to, 'k' + /* Expects the following arguments: 'e' shall point to the beginning of an strv we are going to append to, 'k' * to a pointer pointing to the NULL entry at the end of the same array. 'a' shall point to another strv. * - * This call adds every entry of 'a' to 'r', either overriding an existing matching entry, or appending to it. + * This call adds every entry of 'a' to 'e', either overriding an existing matching entry, or appending to it. * - * This call assumes 'r' has enough pre-allocated space to grow by all of 'a''s items. */ + * This call assumes 'e' has enough pre-allocated space to grow by all of 'a''s items. */ for (; *a; a++) { char **j, *c; @@ -159,7 +159,7 @@ static int env_append(char **r, char ***k, char **a) { if ((*a)[n] == '=') n++; - for (j = r; j < *k; j++) + for (j = e; j < *k; j++) if (strneq(*j, *a, n)) break; @@ -266,7 +266,7 @@ static bool env_entry_has_name(const char *entry, const char *name) { char **strv_env_delete(char **x, size_t n_lists, ...) { size_t n, i = 0; - _cleanup_strv_free_ char **r = NULL; + _cleanup_strv_free_ char **t = NULL; va_list ap; /* Deletes every entry from x that is mentioned in the other @@ -274,8 +274,8 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { n = strv_length(x); - r = new(char*, n+1); - if (!r) + t = new(char*, n+1); + if (!t) return NULL; STRV_FOREACH(k, x) { @@ -290,8 +290,8 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { } va_end(ap); - r[i] = strdup(*k); - if (!r[i]) + t[i] = strdup(*k); + if (!t[i]) return NULL; i++; @@ -301,11 +301,11 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { va_end(ap); } - r[i] = NULL; + t[i] = NULL; assert(i <= n); - return TAKE_PTR(r); + return TAKE_PTR(t); } char **strv_env_unset(char **l, const char *p) { @@ -586,7 +586,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { const char *e, *word = format, *test_value = NULL; /* test_value is initialized to appease gcc */ char *k; - _cleanup_free_ char *r = NULL; + _cleanup_free_ char *s = NULL; size_t i, len = 0; /* len is initialized to appease gcc */ int nest = 0; @@ -602,31 +602,31 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { case CURLY: if (*e == '{') { - k = strnappend(r, word, e-word-1); + k = strnappend(s, word, e-word-1); if (!k) return NULL; - free_and_replace(r, k); + free_and_replace(s, k); word = e-1; state = VARIABLE; nest++; } else if (*e == '$') { - k = strnappend(r, word, e-word); + k = strnappend(s, word, e-word); if (!k) return NULL; - free_and_replace(r, k); + free_and_replace(s, k); word = e+1; state = WORD; } else if (flags & REPLACE_ENV_ALLOW_BRACELESS && strchr(VALID_BASH_ENV_NAME_CHARS, *e)) { - k = strnappend(r, word, e-word-1); + k = strnappend(s, word, e-word-1); if (!k) return NULL; - free_and_replace(r, k); + free_and_replace(s, k); word = e-1; state = VARIABLE_RAW; @@ -641,7 +641,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { t = strv_env_get_n(env, word+2, e-word-2, flags); - if (!strextend(&r, t)) + if (!strextend(&s, t)) return NULL; word = e+1; @@ -694,7 +694,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { else if (!t && state == DEFAULT_VALUE) t = v = replace_env_n(test_value, e-test_value, env, flags); - if (!strextend(&r, t)) + if (!strextend(&s, t)) return NULL; word = e+1; @@ -710,7 +710,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { t = strv_env_get_n(env, word+1, e-word-1, flags); - if (!strextend(&r, t)) + if (!strextend(&s, t)) return NULL; word = e--; @@ -726,9 +726,9 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { assert(flags & REPLACE_ENV_ALLOW_BRACELESS); t = strv_env_get_n(env, word+1, e-word-1, flags); - return strjoin(r, t); + return strjoin(s, t); } else - return strnappend(r, word, e-word); + return strnappend(s, word, e-word); } char **replace_env_argv(char **argv, char **env) { From cc09d8a5a1e0b5bec836987244aa6f073a7a61da Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 14:24:47 +0200 Subject: [PATCH 03/19] env-util: use _cleanup_ in replace_env_argv() --- src/basic/env-util.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/basic/env-util.c b/src/basic/env-util.c index e3ae1a9663..03b4547cf3 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -732,7 +732,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { } char **replace_env_argv(char **argv, char **env) { - char **ret; + _cleanup_strv_free_ char **ret = NULL; size_t k = 0, l = 0; l = strv_length(argv); @@ -756,7 +756,6 @@ char **replace_env_argv(char **argv, char **env) { r = strv_split_full(&m, e, WHITESPACE, EXTRACT_RELAX|EXTRACT_UNQUOTE); if (r < 0) { ret[k] = NULL; - strv_free(ret); return NULL; } } else @@ -768,7 +767,6 @@ char **replace_env_argv(char **argv, char **env) { w = reallocarray(ret, l + 1, sizeof(char *)); if (!w) { ret[k] = NULL; - strv_free(ret); strv_free(m); return NULL; } @@ -785,15 +783,13 @@ char **replace_env_argv(char **argv, char **env) { /* If ${FOO} appears as part of a word, replace it by the variable as-is */ ret[k] = replace_env(*i, env, 0); - if (!ret[k]) { - strv_free(ret); + if (!ret[k]) return NULL; - } k++; } ret[k] = NULL; - return ret; + return TAKE_PTR(ret); } int getenv_bool(const char *p) { From 93eceb59e65871fa7e85baff2d69a38b610af913 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 14:40:54 +0200 Subject: [PATCH 04/19] env-util: use more _cleanup_ in replace_env_argv() --- src/basic/env-util.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 03b4547cf3..5a933d7f08 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -746,7 +746,8 @@ char **replace_env_argv(char **argv, char **env) { /* If $FOO appears as single word, replace it by the split up variable */ if ((*i)[0] == '$' && !IN_SET((*i)[1], '{', '$')) { char *e; - char **w, **m = NULL; + char **w; + _cleanup_strv_free_ char **m = NULL; size_t q; e = strv_env_get(env, *i+1); @@ -758,8 +759,7 @@ char **replace_env_argv(char **argv, char **env) { ret[k] = NULL; return NULL; } - } else - m = NULL; + } q = strv_length(m); l = l + q - 1; @@ -767,14 +767,13 @@ char **replace_env_argv(char **argv, char **env) { w = reallocarray(ret, l + 1, sizeof(char *)); if (!w) { ret[k] = NULL; - strv_free(m); return NULL; } ret = w; if (m) { memcpy(ret + k, m, q * sizeof(char*)); - free(m); + m = mfree(m); } k += q; From 737e0f12d926a9aeb1ce5df14ae6bdd12d7eaa35 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 10:44:26 +0200 Subject: [PATCH 05/19] logind-core: modernize button_free() --- src/login/logind-button.c | 8 +++++--- src/login/logind-button.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/login/logind-button.c b/src/login/logind-button.c index 727dad0b16..7f95fa7a4f 100644 --- a/src/login/logind-button.c +++ b/src/login/logind-button.c @@ -53,8 +53,9 @@ Button* button_new(Manager *m, const char *name) { return b; } -void button_free(Button *b) { - assert(b); +Button *button_free(Button *b) { + if (!b) + return NULL; hashmap_remove(b->manager->buttons, b->name); @@ -65,7 +66,8 @@ void button_free(Button *b) { free(b->name); free(b->seat); - free(b); + + return mfree(b); } int button_set_seat(Button *b, const char *sn) { diff --git a/src/login/logind-button.h b/src/login/logind-button.h index 041d66521c..6c39471fb4 100644 --- a/src/login/logind-button.h +++ b/src/login/logind-button.h @@ -20,7 +20,7 @@ struct Button { }; Button* button_new(Manager *m, const char *name); -void button_free(Button *b); +Button *button_free(Button *b); int button_open(Button *b); int button_set_seat(Button *b, const char *sn); int button_check_switches(Button *b); From 3d01bfa7db96e0aa6c252078a53f04b6972c94d9 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 10:44:43 +0200 Subject: [PATCH 06/19] logind-core: drop unneeded check for NULL --- src/login/logind-core.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 8e1c54dbe2..dd4b246893 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -323,15 +323,11 @@ int manager_process_button_device(Manager *m, sd_device *d) { return r; if (device_for_action(d, SD_DEVICE_REMOVE) || - sd_device_has_current_tag(d, "power-switch") <= 0) { + sd_device_has_current_tag(d, "power-switch") <= 0) - b = hashmap_get(m->buttons, sysname); - if (!b) - return 0; + button_free(hashmap_get(m->buttons, sysname)); - button_free(b); - - } else { + else { const char *sn; r = manager_add_button(m, sysname, &b); From 5ce8ce908d53c06c97040927481acb5af2bd1d7a Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 10:48:03 +0200 Subject: [PATCH 07/19] logind: rename function to avoid confusion --- src/login/logind.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/login/logind.c b/src/login/logind.c index a0d6cb3a27..cfb3ef500c 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -40,11 +40,11 @@ #include "udev-util.h" #include "user-util.h" -static Manager* manager_unref(Manager *m); -DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_unref); +static Manager* manager_free(Manager *m); +DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); static int manager_new(Manager **ret) { - _cleanup_(manager_unrefp) Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; int r; assert(ret); @@ -102,7 +102,7 @@ static int manager_new(Manager **ret) { return 0; } -static Manager* manager_unref(Manager *m) { +static Manager* manager_free(Manager *m) { Session *session; User *u; Device *d; @@ -1177,7 +1177,7 @@ static int manager_run(Manager *m) { } static int run(int argc, char *argv[]) { - _cleanup_(manager_unrefp) Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; _unused_ _cleanup_(notify_on_cleanup) const char *notify_message = NULL; int r; From 3cbbefc2a78f7ba281a1d45984bbbb47e015a16a Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 14:44:06 +0200 Subject: [PATCH 08/19] path-util: use _cleanup_ --- src/basic/path-util.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/basic/path-util.c b/src/basic/path-util.c index 0b0f0da760..a681065565 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -22,7 +22,7 @@ #include "time-util.h" int path_split_and_make_absolute(const char *p, char ***ret) { - char **l; + _cleanup_strv_free_ char **l = NULL; int r; assert(p); @@ -33,12 +33,10 @@ int path_split_and_make_absolute(const char *p, char ***ret) { return -ENOMEM; r = path_strv_make_absolute_cwd(l); - if (r < 0) { - strv_free(l); + if (r < 0) return r; - } - *ret = l; + *ret = TAKE_PTR(l); return r; } From 1cc3a1302fa3e27fae59ec63384e2f684a635dae Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 16:07:31 +0200 Subject: [PATCH 09/19] specifier: use _cleanup_ --- src/shared/specifier.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/shared/specifier.c b/src/shared/specifier.c index a4a4017f06..31390fbd89 100644 --- a/src/shared/specifier.c +++ b/src/shared/specifier.c @@ -464,7 +464,8 @@ int specifier_var_tmp_dir(char specifier, const void *data, const char *root, co } int specifier_escape_strv(char **l, char ***ret) { - char **z, **p, **q; + _cleanup_strv_free_ char **z = NULL; + char **p, **q; assert(ret); @@ -480,14 +481,12 @@ int specifier_escape_strv(char **l, char ***ret) { for (p = l, q = z; *p; p++, q++) { *q = specifier_escape(*p); - if (!*q) { - strv_free(z); + if (!*q) return -ENOMEM; - } } *q = NULL; - *ret = z; + *ret = TAKE_PTR(z); return 0; } From 70bbf65942a35dc493b2efbe9f8112e394a45b82 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:34:49 +0200 Subject: [PATCH 10/19] initctl: add assert --- src/initctl/initctl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c index 99f28721de..b7fd215acd 100644 --- a/src/initctl/initctl.c +++ b/src/initctl/initctl.c @@ -287,6 +287,7 @@ static int process_event(Server *s, struct epoll_event *ev) { Fifo *f; assert(s); + assert(ev); if (!(ev->events & EPOLLIN)) return log_info_errno(SYNTHETIC_ERRNO(EIO), From 0a956e8e02b60329ff683db27369cbfdabf477aa Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:34:11 +0200 Subject: [PATCH 11/19] initctl: use _cleanup_ --- src/initctl/initctl.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c index b7fd215acd..d1b7c30562 100644 --- a/src/initctl/initctl.c +++ b/src/initctl/initctl.c @@ -284,7 +284,7 @@ static int server_init(Server *s, unsigned n_sockets) { static int process_event(Server *s, struct epoll_event *ev) { int r; - Fifo *f; + _cleanup_(fifo_freep) Fifo *f = NULL; assert(s); assert(ev); @@ -295,11 +295,10 @@ static int process_event(Server *s, struct epoll_event *ev) { f = (Fifo*) ev->data.ptr; r = fifo_process(f); - if (r < 0) { - log_info_errno(r, "Got error on fifo: %m"); - fifo_free(f); - return r; - } + if (r < 0) + return log_info_errno(r, "Got error on fifo: %m"); + + TAKE_PTR(f); return 0; } From 12da8805e7b1112f026971be81364d04b07dd405 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:06:28 +0200 Subject: [PATCH 12/19] transaction: modernize transaction_free() --- src/core/transaction.c | 8 ++++++-- src/core/transaction.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/transaction.c b/src/core/transaction.c index 059558ebc0..0038d541b3 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -1199,8 +1199,12 @@ Transaction *transaction_new(bool irreversible) { return tr; } -void transaction_free(Transaction *tr) { +Transaction *transaction_free(Transaction *tr) { + if (!tr) + return NULL; + assert(hashmap_isempty(tr->jobs)); hashmap_free(tr->jobs); - free(tr); + + return mfree(tr); } diff --git a/src/core/transaction.h b/src/core/transaction.h index c431271eb2..5258e27106 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -16,7 +16,7 @@ struct Transaction { }; Transaction *transaction_new(bool irreversible); -void transaction_free(Transaction *tr); +Transaction *transaction_free(Transaction *tr); void transaction_add_propagate_reload_jobs(Transaction *tr, Unit *unit, Job *by, bool ignore_order, sd_bus_error *e); int transaction_add_job_and_dependencies( From 542fe40845e2e51980b7b53f3943b119be8e0214 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:13:35 +0200 Subject: [PATCH 13/19] transaction: introduce transaction_abort_and_free() Will be used in following commits. --- src/core/transaction.c | 9 +++++++++ src/core/transaction.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/src/core/transaction.c b/src/core/transaction.c index 0038d541b3..1c71d58c81 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -1208,3 +1208,12 @@ Transaction *transaction_free(Transaction *tr) { return mfree(tr); } + +Transaction *transaction_abort_and_free(Transaction *tr) { + if (!tr) + return NULL; + + transaction_abort(tr); + + return transaction_free(tr); +} diff --git a/src/core/transaction.h b/src/core/transaction.h index 5258e27106..79012d4d1d 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -17,6 +17,8 @@ struct Transaction { Transaction *transaction_new(bool irreversible); Transaction *transaction_free(Transaction *tr); +Transaction *transaction_abort_and_free(Transaction *tr); +DEFINE_TRIVIAL_CLEANUP_FUNC(Transaction*, transaction_abort_and_free); void transaction_add_propagate_reload_jobs(Transaction *tr, Unit *unit, Job *by, bool ignore_order, sd_bus_error *e); int transaction_add_job_and_dependencies( From c7e3eb5dd52fa574d97ba5abdef2c8af8a1839e9 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:14:17 +0200 Subject: [PATCH 14/19] manager: use _cleanup_ in manager_add_job() --- src/core/manager.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index 94416665ec..97e9f492dc 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2019,7 +2019,7 @@ int manager_add_job( sd_bus_error *error, Job **ret) { - Transaction *tr; + _cleanup_(transaction_abort_and_freep) Transaction *tr = NULL; int r; assert(m); @@ -2048,23 +2048,23 @@ int manager_add_job( IN_SET(mode, JOB_IGNORE_DEPENDENCIES, JOB_IGNORE_REQUIREMENTS), mode == JOB_IGNORE_DEPENDENCIES, error); if (r < 0) - goto tr_abort; + return r; if (mode == JOB_ISOLATE) { r = transaction_add_isolate_jobs(tr, m); if (r < 0) - goto tr_abort; + return r; } if (mode == JOB_TRIGGERING) { r = transaction_add_triggering_jobs(tr, unit); if (r < 0) - goto tr_abort; + return r; } r = transaction_activate(tr, m, mode, affected_jobs, error); if (r < 0) - goto tr_abort; + return r; log_unit_debug(unit, "Enqueued job %s/%s as %u", unit->id, @@ -2073,13 +2073,8 @@ int manager_add_job( if (ret) *ret = tr->anchor_job; - transaction_free(tr); + tr = transaction_free(tr); return 0; - -tr_abort: - transaction_abort(tr); - transaction_free(tr); - return r; } int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, sd_bus_error *e, Job **ret) { From 32620826cf76d6de4f435bfba84d0a7f0d5207f1 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:15:38 +0200 Subject: [PATCH 15/19] manager: use _cleanup_ in manager_propagate_reload() --- src/core/manager.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index 97e9f492dc..ce9b27ece7 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2112,7 +2112,7 @@ int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e) { int r; - Transaction *tr; + _cleanup_(transaction_abort_and_freep) Transaction *tr = NULL; assert(m); assert(unit); @@ -2126,22 +2126,17 @@ int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error /* We need an anchor job */ r = transaction_add_job_and_dependencies(tr, JOB_NOP, unit, NULL, false, false, true, true, e); if (r < 0) - goto tr_abort; + return r; /* Failure in adding individual dependencies is ignored, so this always succeeds. */ transaction_add_propagate_reload_jobs(tr, unit, tr->anchor_job, mode == JOB_IGNORE_DEPENDENCIES, e); r = transaction_activate(tr, m, mode, NULL, e); if (r < 0) - goto tr_abort; + return r; - transaction_free(tr); + tr = transaction_free(tr); return 0; - -tr_abort: - transaction_abort(tr); - transaction_free(tr); - return r; } Job *manager_get_job(Manager *m, uint32_t id) { From 7fb1cc85ab532b0087dc8bc231fec35f21e064d7 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 28 Apr 2023 09:28:25 +0200 Subject: [PATCH 16/19] transaction: make transaction_free() static ... as it's not needed outside transaction.c anymore. --- src/core/transaction.c | 2 +- src/core/transaction.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/transaction.c b/src/core/transaction.c index 1c71d58c81..af643d0a0b 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -34,7 +34,7 @@ static void transaction_delete_unit(Transaction *tr, Unit *u) { transaction_delete_job(tr, j, true); } -void transaction_abort(Transaction *tr) { +static void transaction_abort(Transaction *tr) { Job *j; assert(tr); diff --git a/src/core/transaction.h b/src/core/transaction.h index 79012d4d1d..b42d434dd1 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -34,4 +34,3 @@ int transaction_add_job_and_dependencies( int transaction_activate(Transaction *tr, Manager *m, JobMode mode, Set *affected, sd_bus_error *e); int transaction_add_isolate_jobs(Transaction *tr, Manager *m); int transaction_add_triggering_jobs(Transaction *tr, Unit *u); -void transaction_abort(Transaction *tr); From fc447921a81625229f057cf67527343895da3a34 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:30:45 +0200 Subject: [PATCH 17/19] homed-manager-bus: use _cleanup_ --- src/home/homed-manager-bus.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c index 0c0c292a70..ca639ae39e 100644 --- a/src/home/homed-manager-bus.c +++ b/src/home/homed-manager-bus.c @@ -385,7 +385,7 @@ static int method_register_home( _cleanup_(user_record_unrefp) UserRecord *hr = NULL; Manager *m = ASSERT_PTR(userdata); - Home *h; + _cleanup_(home_freep) Home *h = NULL; int r; assert(message); @@ -413,10 +413,10 @@ static int method_register_home( return r; r = home_save_record(h); - if (r < 0) { - home_free(h); + if (r < 0) return r; - } + + TAKE_PTR(h); return sd_bus_reply_method_return(message, NULL); } From 80e52052dbb42ed15ea74dc3b880bf51917e8f43 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:50:21 +0200 Subject: [PATCH 18/19] logind-session-device: modernize session_device_free() --- src/login/logind-session-device.c | 8 +++++--- src/login/logind-session-device.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c index a8b3b48992..9743cd570c 100644 --- a/src/login/logind-session-device.c +++ b/src/login/logind-session-device.c @@ -375,8 +375,9 @@ error: return r; } -void session_device_free(SessionDevice *sd) { - assert(sd); +SessionDevice *session_device_free(SessionDevice *sd) { + if (!sd) + return NULL; /* Make sure to remove the pushed fd. */ if (sd->pushed_fd) @@ -391,7 +392,8 @@ void session_device_free(SessionDevice *sd) { hashmap_remove(sd->session->devices, &sd->dev); free(sd->node); - free(sd); + + return mfree(sd); } void session_device_complete_pause(SessionDevice *sd) { diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h index 4da3fe6533..a606d84f0e 100644 --- a/src/login/logind-session-device.h +++ b/src/login/logind-session-device.h @@ -28,7 +28,7 @@ struct SessionDevice { }; int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **out); -void session_device_free(SessionDevice *sd); +SessionDevice *session_device_free(SessionDevice *sd); void session_device_complete_pause(SessionDevice *sd); void session_device_resume_all(Session *s); From 360179ea4621a65e9993782bfe28ac4168a7e254 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 21 Apr 2023 15:53:02 +0200 Subject: [PATCH 19/19] logind-session-dbus: use _cleanup_ --- src/login/logind-session-dbus.c | 12 +++++------- src/login/logind-session-device.h | 2 ++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c index e3bebc9188..bc7d8fdc1c 100644 --- a/src/login/logind-session-dbus.c +++ b/src/login/logind-session-dbus.c @@ -424,7 +424,7 @@ static int method_set_display(sd_bus_message *message, void *userdata, sd_bus_er static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_error *error) { Session *s = ASSERT_PTR(userdata); uint32_t major, minor; - SessionDevice *sd; + _cleanup_(session_device_freep) SessionDevice *sd = NULL; dev_t dev; int r; @@ -456,18 +456,16 @@ static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_er r = session_device_save(sd); if (r < 0) - goto error; + return r; r = sd_bus_reply_method_return(message, "hb", sd->fd, !sd->active); if (r < 0) - goto error; + return r; session_save(s); - return 1; + TAKE_PTR(sd); -error: - session_device_free(sd); - return r; + return 1; } static int method_release_device(sd_bus_message *message, void *userdata, sd_bus_error *error) { diff --git a/src/login/logind-session-device.h b/src/login/logind-session-device.h index a606d84f0e..04654d1252 100644 --- a/src/login/logind-session-device.h +++ b/src/login/logind-session-device.h @@ -29,6 +29,8 @@ struct SessionDevice { int session_device_new(Session *s, dev_t dev, bool open_device, SessionDevice **out); SessionDevice *session_device_free(SessionDevice *sd); +DEFINE_TRIVIAL_CLEANUP_FUNC(SessionDevice*, session_device_free); + void session_device_complete_pause(SessionDevice *sd); void session_device_resume_all(Session *s);