jobs: Only clear gotsigchld when waiting for everything
commit6c691b3e5099de380a9d2f97d5c72f4a978bb794
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 18 May 2018 18:39:41 +0000 (19 02:39 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 28 May 2018 09:12:22 +0000 (28 17:12 +0800)
tree53672df8d103ca0a1af2f1ff3eb0e15eba2081d5
parent983085923ae1d45196868b48f576b1a19e03e72b
jobs: Only clear gotsigchld when waiting for everything

The gotsigchld flag is always cleared in dowait but not all callers
of dowait will wait for everything.  In particular, when jp is set
we only wait until the set job isn't running anymore.

This patch fixes this by only clearing gotsigchld if jp is unset.
It also changes the waitcmd to actually set jp which corresponds
to the behaviour of bash/ksh93/mksh.

The only other caller of dowait that doesn't wait for everything
is the jobless reaper.  This is in fact redundant now that we wait
after every simple command.  This patch removes it.

Finally as every caller of dowait needs to wait until either the
given job is not running, or until all terminated jobs have been
processed, this patch moves the loop into dowait itself.

Fixes: 03876c0743a5 ("eval: Reap zombies after built-in...")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
src/jobs.c