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.
This commit is contained in:
+38
-41
@@ -6956,37 +6956,13 @@ 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. */
|
||||
|
||||
if (destroy && 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);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to nuke %s: %m", rt->tmp_dir);
|
||||
else
|
||||
rt->tmp_dir = NULL;
|
||||
}
|
||||
|
||||
if (destroy && 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);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to nuke %s: %m", rt->var_tmp_dir);
|
||||
else
|
||||
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);
|
||||
@@ -6995,8 +6971,42 @@ static ExecSharedRuntime* exec_shared_runtime_free(ExecSharedRuntime *rt, bool d
|
||||
return mfree(rt);
|
||||
}
|
||||
|
||||
static void exec_shared_runtime_freep(ExecSharedRuntime **rt) {
|
||||
(void) exec_shared_runtime_free(*rt, false);
|
||||
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 (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);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to nuke %s: %m", rt->tmp_dir);
|
||||
else
|
||||
rt->tmp_dir = NULL;
|
||||
}
|
||||
|
||||
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);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to nuke %s: %m", rt->var_tmp_dir);
|
||||
else
|
||||
rt->var_tmp_dir = NULL;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -484,7 +484,8 @@ void exec_status_dump(const ExecStatus *s, FILE *f, const char *prefix);
|
||||
void exec_status_reset(ExecStatus *s);
|
||||
|
||||
int exec_shared_runtime_acquire(Manager *m, const ExecContext *c, const char *name, bool create, ExecSharedRuntime **ret);
|
||||
ExecSharedRuntime *exec_shared_runtime_unref(ExecSharedRuntime *r, bool destroy);
|
||||
ExecSharedRuntime *exec_shared_runtime_destroy(ExecSharedRuntime *r);
|
||||
ExecSharedRuntime *exec_shared_runtime_unref(ExecSharedRuntime *r);
|
||||
|
||||
int exec_shared_runtime_serialize(const Manager *m, FILE *f, FDSet *fds);
|
||||
int exec_shared_runtime_deserialize_compat(Unit *u, const char *key, const char *value, FDSet *fds);
|
||||
|
||||
+2
-2
@@ -254,7 +254,7 @@ static void mount_done(Unit *u) {
|
||||
mount_parameters_done(&m->parameters_proc_self_mountinfo);
|
||||
mount_parameters_done(&m->parameters_fragment);
|
||||
|
||||
m->exec_runtime = exec_shared_runtime_unref(m->exec_runtime, false);
|
||||
m->exec_runtime = exec_shared_runtime_unref(m->exec_runtime);
|
||||
exec_command_done_array(m->exec_command, _MOUNT_EXEC_COMMAND_MAX);
|
||||
m->control_command = NULL;
|
||||
|
||||
@@ -948,7 +948,7 @@ static void mount_enter_dead(Mount *m, MountResult f) {
|
||||
|
||||
mount_set_state(m, m->result != MOUNT_SUCCESS ? MOUNT_FAILED : MOUNT_DEAD);
|
||||
|
||||
m->exec_runtime = exec_shared_runtime_unref(m->exec_runtime, true);
|
||||
m->exec_runtime = exec_shared_runtime_destroy(m->exec_runtime);
|
||||
|
||||
unit_destroy_runtime_data(UNIT(m), &m->exec_context);
|
||||
|
||||
|
||||
+2
-2
@@ -383,7 +383,7 @@ static void service_done(Unit *u) {
|
||||
s->pid_file = mfree(s->pid_file);
|
||||
s->status_text = mfree(s->status_text);
|
||||
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, false);
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime);
|
||||
exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
|
||||
s->control_command = NULL;
|
||||
s->main_command = NULL;
|
||||
@@ -1925,7 +1925,7 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
|
||||
s->notify_access_override = _NOTIFY_ACCESS_INVALID;
|
||||
|
||||
/* We want fresh tmpdirs in case service is started again immediately */
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, true);
|
||||
s->exec_runtime = exec_shared_runtime_destroy(s->exec_runtime);
|
||||
|
||||
/* Also, remove the runtime directory */
|
||||
unit_destroy_runtime_data(UNIT(s), &s->exec_context);
|
||||
|
||||
+2
-2
@@ -150,7 +150,7 @@ static void socket_done(Unit *u) {
|
||||
|
||||
s->peers_by_address = set_free(s->peers_by_address);
|
||||
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, false);
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime);
|
||||
exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
|
||||
s->control_command = NULL;
|
||||
|
||||
@@ -2049,7 +2049,7 @@ static void socket_enter_dead(Socket *s, SocketResult f) {
|
||||
|
||||
socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
|
||||
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, true);
|
||||
s->exec_runtime = exec_shared_runtime_destroy(s->exec_runtime);
|
||||
|
||||
unit_destroy_runtime_data(UNIT(s), &s->exec_context);
|
||||
|
||||
|
||||
+2
-2
@@ -170,7 +170,7 @@ static void swap_done(Unit *u) {
|
||||
s->parameters_fragment.what = mfree(s->parameters_fragment.what);
|
||||
s->parameters_fragment.options = mfree(s->parameters_fragment.options);
|
||||
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, false);
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime);
|
||||
exec_command_done_array(s->exec_command, _SWAP_EXEC_COMMAND_MAX);
|
||||
s->control_command = NULL;
|
||||
|
||||
@@ -719,7 +719,7 @@ static void swap_enter_dead(Swap *s, SwapResult f) {
|
||||
unit_warn_leftover_processes(UNIT(s), unit_log_leftover_process_stop);
|
||||
swap_set_state(s, s->result != SWAP_SUCCESS ? SWAP_FAILED : SWAP_DEAD);
|
||||
|
||||
s->exec_runtime = exec_shared_runtime_unref(s->exec_runtime, true);
|
||||
s->exec_runtime = exec_shared_runtime_destroy(s->exec_runtime);
|
||||
|
||||
unit_destroy_runtime_data(UNIT(s), &s->exec_context);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user