diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-03-27 14:32:58 +0200 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-03-27 14:32:58 +0200 |
commit | e52a696a9af9e46e6e2be799a344bd9fb34dd3f4 (patch) | |
tree | c36619c797cb8e8f89ced5bc5cc1a112a516ed2e /src/core/execute.c | |
parent | e76506b74816174cf9ec26262c7c4669a6d5172d (diff) | |
download | systemd-e52a696a9af9e46e6e2be799a344bd9fb34dd3f4.tar.gz |
execute: Do not pass destroy as a boolean argument to unref()
Let's mimick what we do for DynamicUser and have two separate functions
for unreffing and destroying a ExecSharedRuntime object.
Diffstat (limited to 'src/core/execute.c')
-rw-r--r-- | src/core/execute.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index b5cf140f72..3011f15dfb 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -6956,18 +6956,37 @@ static void *remove_tmpdir_thread(void *p) { return NULL; } -static ExecSharedRuntime* exec_shared_runtime_free(ExecSharedRuntime *rt, bool destroy) { - int r; - +static ExecSharedRuntime* exec_shared_runtime_free(ExecSharedRuntime *rt) { if (!rt) return NULL; if (rt->manager) (void) hashmap_remove(rt->manager->exec_shared_runtime_by_id, rt->id); - /* When destroy is true, then rm_rf tmp_dir and var_tmp_dir. */ + rt->id = mfree(rt->id); + rt->tmp_dir = mfree(rt->tmp_dir); + rt->var_tmp_dir = mfree(rt->var_tmp_dir); + safe_close_pair(rt->netns_storage_socket); + safe_close_pair(rt->ipcns_storage_socket); + return mfree(rt); +} + +DEFINE_TRIVIAL_UNREF_FUNC(ExecSharedRuntime, exec_shared_runtime, exec_shared_runtime_free); +DEFINE_TRIVIAL_CLEANUP_FUNC(ExecSharedRuntime*, exec_shared_runtime_free); + +ExecSharedRuntime* exec_shared_runtime_destroy(ExecSharedRuntime *rt) { + int r; + + if (!rt) + return NULL; + + assert(rt->n_ref > 0); + rt->n_ref--; + + if (rt->n_ref > 0) + return NULL; - if (destroy && rt->tmp_dir && !streq(rt->tmp_dir, RUN_SYSTEMD_EMPTY)) { + if (rt->tmp_dir && !streq(rt->tmp_dir, RUN_SYSTEMD_EMPTY)) { log_debug("Spawning thread to nuke %s", rt->tmp_dir); r = asynchronous_job(remove_tmpdir_thread, rt->tmp_dir); @@ -6977,7 +6996,7 @@ static ExecSharedRuntime* exec_shared_runtime_free(ExecSharedRuntime *rt, bool d rt->tmp_dir = NULL; } - if (destroy && rt->var_tmp_dir && !streq(rt->var_tmp_dir, RUN_SYSTEMD_EMPTY)) { + if (rt->var_tmp_dir && !streq(rt->var_tmp_dir, RUN_SYSTEMD_EMPTY)) { log_debug("Spawning thread to nuke %s", rt->var_tmp_dir); r = asynchronous_job(remove_tmpdir_thread, rt->var_tmp_dir); @@ -6987,16 +7006,7 @@ static ExecSharedRuntime* exec_shared_runtime_free(ExecSharedRuntime *rt, bool d rt->var_tmp_dir = NULL; } - rt->id = mfree(rt->id); - rt->tmp_dir = mfree(rt->tmp_dir); - rt->var_tmp_dir = mfree(rt->var_tmp_dir); - safe_close_pair(rt->netns_storage_socket); - safe_close_pair(rt->ipcns_storage_socket); - return mfree(rt); -} - -static void exec_shared_runtime_freep(ExecSharedRuntime **rt) { - (void) exec_shared_runtime_free(*rt, false); + return exec_shared_runtime_free(rt); } static int exec_shared_runtime_allocate(ExecSharedRuntime **ret, const char *id) { @@ -7152,19 +7162,6 @@ ref: return 1; } -ExecSharedRuntime *exec_shared_runtime_unref(ExecSharedRuntime *rt, bool destroy) { - if (!rt) - return NULL; - - assert(rt->n_ref > 0); - - rt->n_ref--; - if (rt->n_ref > 0) - return NULL; - - return exec_shared_runtime_free(rt, destroy); -} - int exec_shared_runtime_serialize(const Manager *m, FILE *f, FDSet *fds) { ExecSharedRuntime *rt; @@ -7438,7 +7435,7 @@ void exec_shared_runtime_vacuum(Manager *m) { if (rt->n_ref > 0) continue; - (void) exec_shared_runtime_free(rt, false); + (void) exec_shared_runtime_free(rt); } } |