ash: jobs - Do not block when waiting on SIGCHLD
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Feb 2020 13:37:56 +0000 (14:37 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Feb 2020 14:37:22 +0000 (15:37 +0100)
commit97edfc42f112a15828aaec886ef7012d24f34d5e
tree49297967a0a7a1e1288e2113edc18d1fcbf813d8
parentd81af7216b3305a1aac211dc847dd1c191f3b307
ash: jobs - Do not block when waiting on SIGCHLD

Upstream comment:

    Date: Mon, 7 May 2018 00:40:34 +0800
    jobs - Do not block when waiting on SIGCHLD

    Because of the nature of SIGCHLD, the process may have already been
    waited on and therefore we must be prepared for the case that wait
    may block.  So ensure that it doesn't by using WNOHANG.

    Furthermore, multiple jobs may have exited when gotsigchld is set.
    Therefore we need to wait until there are no zombies left.

    Lastly, waitforjob needs to be called with interrupts off and
    the original patch broke that.

    Fixes: 03876c0743a5 ("eval: Reap zombies after built-in...")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
While at it, removed INT_ON/OFF in waitforjob() - it must be called
from INT_OFF region anyway.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c