diff --git a/src/slurmd/smgr.c b/src/slurmd/smgr.c index 54ec703cb6332288ba593d10b7e5ec010bbe3219..abacedbd621b208b70c450ffb2b525440df037ba 100644 --- a/src/slurmd/smgr.c +++ b/src/slurmd/smgr.c @@ -284,6 +284,20 @@ _exec_task(slurmd_job_t *job, int i) exit(errno); } +static void +_smgr_sigset(sigset_t *setp) +{ + if (sigemptyset(setp) < 0) + error("sigemptyset: %m"); + if (sigaddset(setp, SIGCHLD) < 0) + error("sigaddset(SIGCHLD): %m"); + if (sigaddset(setp, SIGTERM) < 0) + error("sigaddset(SIGTERM): %m"); + if (sigaddset(setp, SIGINT) < 0) + error("sigaddset(SIGINT): %m"); + if (sigaddset(setp, SIGXCPU) < 0) + error("sigaddset(SIGXCPU): %m"); +} /* * Block a set of signals so that session manager process @@ -295,16 +309,7 @@ _block_smgr_signals(void) int e; sigset_t set; - if (sigemptyset(&set) < 0) - error("sigemptyset: %m"); - if (sigaddset(&set, SIGCHLD) < 0) - error("sigaddset(SIGCHLD): %m"); - if (sigaddset(&set, SIGTERM) < 0) - error("sigaddset(SIGTERM): %m"); - if (sigaddset(&set, SIGINT) < 0) - error("sigaddset(SIGINT): %m"); - if (sigaddset(&set, SIGXCPU) < 0) - error("sigaddset(SIGXCPU): %m"); + _smgr_sigset(&set); if ((e = pthread_sigmask(SIG_BLOCK, &set, NULL)) < 0) error("pthread_sigmask: %s", slurm_strerror(e)); @@ -323,10 +328,7 @@ _child_exited(void) int sig; sigset_t set; - /* - * Get current mask of blocked signals - */ - xsignal_save_mask(&set); + _smgr_sigset(&set); do { sigwait(&set, &sig); @@ -334,6 +336,7 @@ _child_exited(void) case SIGXCPU: error("job exceeded timelimit"); case SIGCHLD: + debug2("got SIGCHLD"); break; default: debug("slurmd got signal %d", sig); break; @@ -460,6 +463,7 @@ _local_taskid(slurmd_job_t *job, pid_t pid) if (job->task[i]->pid == pid) return i; } + debug("unknown pid %ld exited status 0x%04x %M", (long) pid); return SLURM_ERROR; }