132-upstream-bash43-032.patch (1507B)
1 BASH PATCH REPORT 2 ================= 3 4 Bash-Release: 4.3 5 Patch-ID: bash43-032 6 7 Bug-Reported-by: crispusfairbairn@gmail.com 8 Bug-Reference-ID: <b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com> 9 Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html 10 11 Bug-Description: 12 13 When bash is running in Posix mode, it allows signals -- including SIGCHLD -- 14 to interrupt the `wait' builtin, as Posix requires. However, the interrupt 15 causes bash to not run a SIGCHLD trap for all exited children. This patch 16 fixes the issue and restores the documented behavior in Posix mode. 17 18 Patch (apply with `patch -p0'): 19 20 --- a/jobs.c 21 +++ b/jobs.c 22 @@ -3339,7 +3339,9 @@ itrace("waitchld: waitpid returns %d blo 23 if (posixly_correct && this_shell_builtin && this_shell_builtin == wait_builtin) 24 { 25 interrupt_immediately = 0; 26 - trap_handler (SIGCHLD); /* set pending_traps[SIGCHLD] */ 27 + /* This was trap_handler (SIGCHLD) but that can lose traps if 28 + children_exited > 1 */ 29 + queue_sigchld_trap (children_exited); 30 wait_signal_received = SIGCHLD; 31 /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up; 32 run_pending_traps will call run_sigchld_trap later */ 33 --- a/patchlevel.h 34 +++ b/patchlevel.h 35 @@ -25,6 +25,6 @@ 36 regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh 37 looks for to find the patch level (for the sccs version string). */ 38 39 -#define PATCHLEVEL 31 40 +#define PATCHLEVEL 32 41 42 #endif /* _PATCHLEVEL_H_ */