ash: jobs: Only clear gotsigchld when waiting for everything
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Feb 2020 14:37:43 +0000 (15:37 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Feb 2020 14:37:43 +0000 (15:37 +0100)
commit47eb979404735b9528538968cb5eaac7355a0c5a
tree3e75d1d7e964b45156c097ce745eee26d004fb9b
parent97edfc42f112a15828aaec886ef7012d24f34d5e
ash: jobs: Only clear gotsigchld when waiting for everything

Upstream commit:

    Date: Sat, 19 May 2018 02:39:41 +0800
    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>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c