hush: preparatory patch for set -o pipefail support
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
2b662c5dec
commit
c08c3f5d26
@ -6309,7 +6309,8 @@ static int checkjobs(struct pipe *fg_pipe)
|
|||||||
#endif
|
#endif
|
||||||
/* Were we asked to wait for fg pipe? */
|
/* Were we asked to wait for fg pipe? */
|
||||||
if (fg_pipe) {
|
if (fg_pipe) {
|
||||||
for (i = 0; i < fg_pipe->num_cmds; i++) {
|
i = fg_pipe->num_cmds;
|
||||||
|
while (--i >= 0) {
|
||||||
debug_printf_jobs("check pid %d\n", fg_pipe->cmds[i].pid);
|
debug_printf_jobs("check pid %d\n", fg_pipe->cmds[i].pid);
|
||||||
if (fg_pipe->cmds[i].pid != childpid)
|
if (fg_pipe->cmds[i].pid != childpid)
|
||||||
continue;
|
continue;
|
||||||
@ -6338,19 +6339,19 @@ static int checkjobs(struct pipe *fg_pipe)
|
|||||||
}
|
}
|
||||||
debug_printf_jobs("fg_pipe: alive_cmds %d stopped_cmds %d\n",
|
debug_printf_jobs("fg_pipe: alive_cmds %d stopped_cmds %d\n",
|
||||||
fg_pipe->alive_cmds, fg_pipe->stopped_cmds);
|
fg_pipe->alive_cmds, fg_pipe->stopped_cmds);
|
||||||
if (fg_pipe->alive_cmds - fg_pipe->stopped_cmds <= 0) {
|
if (fg_pipe->alive_cmds == fg_pipe->stopped_cmds) {
|
||||||
/* All processes in fg pipe have exited or stopped */
|
/* All processes in fg pipe have exited or stopped */
|
||||||
/* Note: *non-interactive* bash does not continue if all processes in fg pipe
|
/* Note: *non-interactive* bash does not continue if all processes in fg pipe
|
||||||
* are stopped. Testcase: "cat | cat" in a script (not on command line!)
|
* are stopped. Testcase: "cat | cat" in a script (not on command line!)
|
||||||
* and "killall -STOP cat" */
|
* and "killall -STOP cat" */
|
||||||
if (G_interactive_fd) {
|
if (G_interactive_fd) {
|
||||||
#if ENABLE_HUSH_JOB
|
#if ENABLE_HUSH_JOB
|
||||||
if (fg_pipe->alive_cmds)
|
if (fg_pipe->alive_cmds != 0)
|
||||||
insert_bg_job(fg_pipe);
|
insert_bg_job(fg_pipe);
|
||||||
#endif
|
#endif
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
if (!fg_pipe->alive_cmds)
|
if (fg_pipe->alive_cmds == 0)
|
||||||
return rcode;
|
return rcode;
|
||||||
}
|
}
|
||||||
/* There are still running processes in the fg pipe */
|
/* There are still running processes in the fg pipe */
|
||||||
|
Loading…
Reference in New Issue
Block a user