diff --git a/mxqd.c b/mxqd.c index 880059f3..ec6b6579 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1146,6 +1146,8 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist, argv[0]); } +static char tmpdir_script[] = LIBEXECDIR "/mxq/tmpdir-setup"; + static unsigned long start_job(struct mxq_group_list *glist) { struct mxq_server *server; @@ -1158,8 +1160,6 @@ static unsigned long start_job(struct mxq_group_list *glist) struct mxq_daemon *daemon; - static char tmpdir_script[] = LIBEXECDIR "/mxq/tmpdir-setup"; - pid_t pid; int res; @@ -1871,31 +1871,17 @@ static void rename_outfiles(struct mxq_server *server, struct mxq_group *group, } } -static char *job_tmpdir_path(unsigned long job_id) { - char *pathname; - pathname = mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job_id); - return pathname; -} - -static int unmount_and_remove(char *pathname) { - int res; - res = rmdir(pathname); - if (res && errno==EBUSY) { - res = umount(pathname); - if (res == 0) { - res = rmdir(pathname); - } - } - return res; -} - static void unmount_job_tmpdir(unsigned long job_id) { - char *pathname; - pathname=job_tmpdir_path(job_id); - if (unmount_and_remove(pathname)) { - mx_log_warning("failed to unmount/remove stale job tmpdir %s: %m", pathname); - } - free(pathname); + char *argv[] = { + tmpdir_script, + "cleanup", + mx_asprintf_forever("%lu", job_id), + NULL + }; + int res = mx_call_external(tmpdir_script, argv); + free(argv[2]); + if (res == -1) + mx_log_err("cleanup job tmpdir: %m"); } static void release_gpu(struct mxq_server *server, struct mxq_group *group, struct mxq_job *job) {