summaryrefslogtreecommitdiff
path: root/src/core/execute.c
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-27 14:32:58 +0200
committerDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-27 14:32:58 +0200
commite52a696a9af9e46e6e2be799a344bd9fb34dd3f4 (patch)
treec36619c797cb8e8f89ced5bc5cc1a112a516ed2e /src/core/execute.c
parente76506b74816174cf9ec26262c7c4669a6d5172d (diff)
downloadsystemd-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.c57
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);
}
}