diff --git a/src/core/manager.c b/src/core/manager.c index 84adb9c666..c361a70b79 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -667,7 +667,7 @@ static int manager_setup_sigchld_event_source(Manager *m) { } int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) { - Manager *m; + _cleanup_(manager_freep) Manager *m = NULL; int r; assert(_m); @@ -729,62 +729,60 @@ int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) { r = manager_default_environment(m); if (r < 0) - goto fail; + return r; r = hashmap_ensure_allocated(&m->units, &string_hash_ops); if (r < 0) - goto fail; + return r; r = hashmap_ensure_allocated(&m->jobs, NULL); if (r < 0) - goto fail; + return r; r = hashmap_ensure_allocated(&m->cgroup_unit, &path_hash_ops); if (r < 0) - goto fail; + return r; r = hashmap_ensure_allocated(&m->watch_bus, &string_hash_ops); if (r < 0) - goto fail; + return r; r = sd_event_default(&m->event); if (r < 0) - goto fail; + return r; r = manager_setup_run_queue(m); if (r < 0) - goto fail; + return r; r = manager_setup_signals(m); if (r < 0) - goto fail; + return r; r = manager_setup_cgroup(m); if (r < 0) - goto fail; + return r; r = manager_setup_time_change(m); if (r < 0) - goto fail; + return r; r = manager_setup_sigchld_event_source(m); if (r < 0) - goto fail; + return r; m->udev = udev_new(); - if (!m->udev) { - r = -ENOMEM; - goto fail; - } + if (!m->udev) + return -ENOMEM; r = manager_setup_prefix(m); if (r < 0) - goto fail; + return r; if (MANAGER_IS_SYSTEM(m) && test_run_flags == 0) { r = mkdir_label("/run/systemd/units", 0755); if (r < 0 && r != -EEXIST) - goto fail; + return r; } m->taint_usr = @@ -795,11 +793,8 @@ int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **_m) { * since they might have gotten serialized across the reexec. */ *_m = m; + m = NULL; return 0; - -fail: - manager_free(m); - return r; } static int manager_setup_notify(Manager *m) { diff --git a/src/core/manager.h b/src/core/manager.h index d4eaaa1c4b..93a29417df 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -379,6 +379,7 @@ struct Manager { int manager_new(UnitFileScope scope, unsigned test_run_flags, Manager **m); Manager* manager_free(Manager *m); +DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); void manager_enumerate(Manager *m); int manager_startup(Manager *m, FILE *serialization, FDSet *fds); diff --git a/src/test/test-bpf.c b/src/test/test-bpf.c index 6ca2be41b0..afbc41cf43 100644 --- a/src/test/test-bpf.c +++ b/src/test/test-bpf.c @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; CGroupContext *cc = NULL; _cleanup_(bpf_program_unrefp) BPFProgram *p = NULL; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *u; char log_buf[65535]; int r; @@ -128,11 +128,9 @@ int main(int argc, char *argv[]) { unit_dump(u, stdout, NULL); r = bpf_firewall_compile(u); - if (IN_SET(r, -ENOTTY, -ENOSYS, -EPERM )) { + if (IN_SET(r, -ENOTTY, -ENOSYS, -EPERM )) /* Kernel doesn't support the necessary bpf bits, or masked out via seccomp? */ - manager_free(m); return EXIT_TEST_SKIP; - } assert_se(r >= 0); assert(u->ip_bpf_ingress); @@ -167,7 +165,5 @@ int main(int argc, char *argv[]) { assert_se(SERVICE(u)->exec_command[SERVICE_EXEC_START]->command_next->exec_status.code != CLD_EXITED || SERVICE(u)->exec_command[SERVICE_EXEC_START]->command_next->exec_status.status != EXIT_SUCCESS); - manager_free(m); - return 0; } diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c index 10ae523b52..88032e6e12 100644 --- a/src/test/test-cgroup-mask.c +++ b/src/test/test-cgroup-mask.c @@ -30,7 +30,7 @@ static int test_cgroup_mask(void) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *son, *daughter, *parent, *root, *grandchild, *parent_deep; FILE *serial = NULL; FDSet *fdset = NULL; @@ -114,8 +114,6 @@ static int test_cgroup_mask(void) { assert_se(unit_get_target_mask(parent) == ((CGROUP_MASK_CPU | CGROUP_MASK_CPUACCT | CGROUP_MASK_IO | CGROUP_MASK_BLKIO | CGROUP_MASK_MEMORY) & m->cgroup_supported)); assert_se(unit_get_target_mask(root) == ((CGROUP_MASK_CPU | CGROUP_MASK_CPUACCT | CGROUP_MASK_IO | CGROUP_MASK_BLKIO | CGROUP_MASK_MEMORY) & m->cgroup_supported)); - manager_free(m); - return 0; } diff --git a/src/test/test-engine.c b/src/test/test-engine.c index a7cdbb6018..fb6f404a65 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -31,7 +31,7 @@ int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; _cleanup_(sd_bus_error_free) sd_bus_error err = SD_BUS_ERROR_NULL; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL, *g = NULL, *h = NULL; FILE *serial = NULL; FDSet *fdset = NULL; @@ -143,7 +143,5 @@ int main(int argc, char *argv[]) { assert_se(!hashmap_get(a->dependencies[UNIT_PROPAGATES_RELOAD_TO], c)); assert_se(!hashmap_get(c->dependencies[UNIT_RELOAD_PROPAGATED_FROM], a)); - manager_free(m); - return 0; } diff --git a/src/test/test-execute.c b/src/test/test-execute.c index 645e0b3d47..0290220569 100644 --- a/src/test/test-execute.c +++ b/src/test/test-execute.c @@ -623,7 +623,7 @@ static void test_exec_standardinput(Manager *m) { static int run_tests(UnitFileScope scope, const test_function_t *tests) { const test_function_t *test = NULL; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; int r; assert_se(tests); @@ -639,8 +639,6 @@ static int run_tests(UnitFileScope scope, const test_function_t *tests) { for (test = tests; test && *test; test++) (*test)(m); - manager_free(m); - return 0; } diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c index 804cee34e9..819c8e8ebf 100644 --- a/src/test/test-sched-prio.c +++ b/src/test/test-sched-prio.c @@ -28,7 +28,7 @@ int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *idle_ok, *idle_bad, *rr_ok, *rr_bad, *rr_sched; Service *ser; FILE *serial = NULL; @@ -98,7 +98,5 @@ int main(int argc, char *argv[]) { assert_se(ser->exec_context.cpu_sched_policy == SCHED_RR); assert_se(ser->exec_context.cpu_sched_priority == 99); - manager_free(m); - return EXIT_SUCCESS; } diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index 40eeba6af5..f52a853c98 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -113,7 +113,7 @@ static void test_config_parse_exec(void) { ExecCommand *c = NULL, *c1; const char *ccc; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *u = NULL; r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); @@ -443,7 +443,6 @@ static void test_config_parse_exec(void) { exec_command_free_list(c); unit_free(u); - manager_free(m); } static void test_config_parse_log_extra_fields(void) { @@ -461,7 +460,7 @@ static void test_config_parse_log_extra_fields(void) { int r; - Manager *m = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *u = NULL; ExecContext c = {}; @@ -508,7 +507,6 @@ static void test_config_parse_log_extra_fields(void) { exec_context_free_log_extra_fields(&c); unit_free(u); - manager_free(m); log_info("/* %s – bye */", __func__); } diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c index 416542c83f..f7598d2284 100644 --- a/src/test/test-unit-name.c +++ b/src/test/test-unit-name.c @@ -199,12 +199,11 @@ static void test_unit_name_mangle(void) { } static int test_unit_printf(void) { - Manager *m = NULL; + _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *uid = NULL, *user = NULL, *shell = NULL, *home = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *u, *u2; int r; - _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *uid = NULL, *user = NULL, *shell = NULL, *home = NULL; - assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); assert_se(host = gethostname_malloc()); @@ -276,8 +275,6 @@ static int test_unit_printf(void) { expect(u2, "%b", bid); expect(u2, "%H", host); expect(u2, "%t", "/run/user/*"); - - manager_free(m); #undef expect return 0; diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c index ed6c3d05cc..c280374582 100644 --- a/src/test/test-watch-pid.c +++ b/src/test/test-watch-pid.c @@ -8,8 +8,8 @@ int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; + _cleanup_(manager_freep) Manager *m = NULL; Unit *a, *b, *c, *u; - Manager *m; int r; log_set_max_level(LOG_DEBUG); @@ -90,7 +90,5 @@ int main(int argc, char *argv[]) { unit_unwatch_pid(c, 4711); assert_se(manager_get_unit_by_pid(m, 4711) == NULL); - manager_free(m); - return 0; }