diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-03-03 17:11:39 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-03-03 17:55:32 +0100 |
commit | 98b47d54ce946ad3524f84eb38d2413498a333dc (patch) | |
tree | 3aa4ccadf020f4ace99d78cf97afc2e6c3807648 | |
parent | e2438b7a321de8050f5db6793599a1668c91ccf5 (diff) |
execute: free directory path if we fail to remove it because we cannot allocate a thread
-rw-r--r-- | src/core/execute.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index 9de6e8726f..3312885b87 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -2713,6 +2713,8 @@ static void *remove_tmpdir_thread(void *p) { } void exec_runtime_destroy(ExecRuntime *rt) { + int r; + if (!rt) return; @@ -2722,13 +2724,25 @@ void exec_runtime_destroy(ExecRuntime *rt) { if (rt->tmp_dir) { log_debug("Spawning thread to nuke %s", rt->tmp_dir); - asynchronous_job(remove_tmpdir_thread, rt->tmp_dir); + + r = asynchronous_job(remove_tmpdir_thread, rt->tmp_dir); + if (r < 0) { + log_warning("Failed to nuke %s: %s", rt->tmp_dir, strerror(-r)); + free(rt->tmp_dir); + } + rt->tmp_dir = NULL; } if (rt->var_tmp_dir) { log_debug("Spawning thread to nuke %s", rt->var_tmp_dir); - asynchronous_job(remove_tmpdir_thread, rt->var_tmp_dir); + + r = asynchronous_job(remove_tmpdir_thread, rt->var_tmp_dir); + if (r < 0) { + log_warning("Failed to nuke %s: %s", rt->var_tmp_dir, strerror(-r)); + free(rt->var_tmp_dir); + } + rt->var_tmp_dir = NULL; } |