From 207e4c2a322fe0f928944f7004b5b17ae2dceaaa Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Thu, 27 May 2010 21:37:14 +1000 Subject: [JOBS] Fix wait regression where it does not wait for all jobs The sigsuspend patch broke wait by making it return after just one job has completed. This is because we rely on pendingsigs to signal work and never clear it until waitcmd finishes. This patch adds a separate gotsigchld for this purpose so we can clear it before we start waiting. Signed-off-by: Herbert Xu --- src/trap.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/trap.c') diff --git a/src/trap.c b/src/trap.c index ba32da6..7bd60ab 100644 --- a/src/trap.c +++ b/src/trap.c @@ -78,6 +78,8 @@ char sigmode[NSIG - 1]; static char gotsig[NSIG - 1]; /* last pending signal */ volatile sig_atomic_t pendingsigs; +/* received SIGCHLD */ +int gotsigchld; extern char *signal_names[]; @@ -284,6 +286,12 @@ ignoresig(int signo) void onsig(int signo) { + if (signo == SIGCHLD) { + gotsigchld = 1; + if (!trap[SIGCHLD]) + return; + } + gotsig[signo - 1] = 1; pendingsigs = signo; -- cgit 1.4.1