summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-03-03 17:11:39 +0100
committerLennart Poettering <lennart@poettering.net>2014-03-03 17:55:32 +0100
commit98b47d54ce946ad3524f84eb38d2413498a333dc (patch)
tree3aa4ccadf020f4ace99d78cf97afc2e6c3807648 /src/core
parente2438b7a321de8050f5db6793599a1668c91ccf5 (diff)
execute: free directory path if we fail to remove it because we cannot allocate a thread
Diffstat (limited to 'src/core')
-rw-r--r--src/core/execute.c18
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;
}