diff --git a/src/slurmd/req.c b/src/slurmd/req.c index a86ec747995b28c1931a2808c31896fbfdd34d2c..62169b309c34eb9a479a75ea3fa023bc67f55ff0 100644 --- a/src/slurmd/req.c +++ b/src/slurmd/req.c @@ -160,59 +160,54 @@ _close_fds(void) } static int -_launch_batch_job(batch_job_launch_msg_t *req, slurm_addr *cli) -{ +_fork_new_slurmd(void) +{ pid_t pid; - int rc; switch ((pid = fork())) { case -1: - error("launch_tasks: fork: %m"); + error("fork: %m"); return SLURM_ERROR; break; - case 0: /* child runs job */ + case 0: /* child continues */ slurm_shutdown_msg_engine(conf->lfd); slurm_cred_ctx_destroy(conf->vctx); - rc = mgr_launch_batch_job(req, cli); - exit(rc); + _close_fds(); + /* + * Reopen logfile by calling log_alter() without + * changing log options + */ + log_alter(conf->log_opts, 0, conf->logfile); + return 0; /* NOTREACHED */ break; default: - debug("created process %ld for job %u", - (long) pid, req->job_id); break; } - return SLURM_SUCCESS; + return pid; +} +static int +_launch_batch_job(batch_job_launch_msg_t *req, slurm_addr *cli) +{ + int retval; + + if ((retval = _fork_new_slurmd()) == 0) + exit (mgr_launch_batch_job(req, cli)); + + return retval; } static int _launch_tasks(launch_tasks_request_msg_t *req, slurm_addr *cli) { - pid_t pid; - int rc; + int retval; - switch ((pid = fork())) { - case -1: - error("launch_tasks: fork: %m"); - return SLURM_ERROR; - break; - case 0: /* child runs job */ - slurm_shutdown_msg_engine(conf->lfd); - slurm_cred_ctx_destroy(conf->vctx); - _close_fds(); - rc = mgr_launch_tasks(req, cli); - exit(rc); - /* NOTREACHED */ - break; - default: - debug("created process %ld for job %u.%u", - (long) pid, req->job_id, req->job_step_id); - break; - } + if ((retval = _fork_new_slurmd()) == 0) + exit (mgr_launch_tasks(req, cli)); - return SLURM_SUCCESS; + return retval; } static int