JobInterrupt(TRUE, signo);
JobInterrupt(true, signo);
JobPassSig(signo)    int     signo;	/* The signal number we've received */{    sigset_t nmask, omask;    struct sigaction act;    if (DEBUG(JOB)) {	(void)fprintf(stdout, "JobPassSig(%d) called.\n", signo);	(void)fflush(stdout);    }    Lst_ForEach(&jobs, JobCondPassSig, &signo);    /*     * Deal with proper cleanup based on the signal received. We only run     * the .INTERRUPT target if the signal was in fact an interrupt. The other     * three termination signals are more of a "get out *now*" command.     */    if (signo == SIGINT) {	JobInterrupt(TRUE, signo);    } else if (signo == SIGHUP || signo == SIGTERM || signo == SIGQUIT) {	JobInterrupt(FALSE, signo);    }    /*     * Leave gracefully if SIGQUIT, rather than core dumping.     */    if (signo == SIGQUIT) {	Finish(0);    }    /*     * Send ourselves the signal now we've given the message to everyone else.     * Note we block everything else possible while we're getting the signal.     * This ensures that all our jobs get continued when we wake up before     * we take any other signal.     */    sigemptyset(&nmask);    sigaddset(&nmask, signo);    sigprocmask(SIG_SETMASK, &nmask, &omask);    memset(&act, 0, sizeof act);    act.sa_handler = SIG_DFL;    sigemptyset(&act.sa_mask);    act.sa_flags = 0;    sigaction(signo, &act, NULL);    if (DEBUG(JOB)) {	(void)fprintf(stdout,		       "JobPassSig passing signal to self, mask = %x.\n",		       ~0 & ~(1 << (signo-1)));	(void)fflush(stdout);    }    (void)signal(signo, SIG_DFL);    (void)KILL(getpid(), signo);    signo = SIGCONT;    Lst_ForEach(&jobs, JobCondPassSig, &signo);    (void)sigprocmask(SIG_SETMASK, &omask, NULL);    sigprocmask(SIG_SETMASK, &omask, NULL);    act.sa_handler = JobPassSig;    sigaction(signo, &act, NULL);}