svashisht / rpms / bash

Forked from rpms/bash 6 years ago
Clone
Ondrej Oprala f6d304b
			     BASH PATCH REPORT
Ondrej Oprala f6d304b
			     =================
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
Bash-Release:	4.3
Ondrej Oprala f6d304b
Patch-ID:	bash43-032
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
Bug-Reported-by:	crispusfairbairn@gmail.com
Ondrej Oprala f6d304b
Bug-Reference-ID:	<b5e499f7-3b98-408d-9f94-c0387580e73a@googlegroups.com>
Ondrej Oprala f6d304b
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00013.html
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
Bug-Description:
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
When bash is running in Posix mode, it allows signals -- including SIGCHLD --
Ondrej Oprala f6d304b
to interrupt the `wait' builtin, as Posix requires.  However, the interrupt
Ondrej Oprala f6d304b
causes bash to not run a SIGCHLD trap for all exited children.  This patch
Ondrej Oprala f6d304b
fixes the issue and restores the documented behavior in Posix mode.
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
Patch (apply with `patch -p0'):
Ondrej Oprala f6d304b
Ondrej Oprala f6d304b
*** ../bash-4.3-patched/jobs.c	2014-05-14 09:20:15.000000000 -0400
Ondrej Oprala f6d304b
--- jobs.c	2014-09-09 11:50:38.000000000 -0400
Ondrej Oprala f6d304b
***************
Ondrej Oprala f6d304b
*** 3340,3344 ****
Ondrej Oprala f6d304b
  	{
Ondrej Oprala f6d304b
  	  interrupt_immediately = 0;
Ondrej Oprala f6d304b
! 	  trap_handler (SIGCHLD);	/* set pending_traps[SIGCHLD] */
Ondrej Oprala f6d304b
  	  wait_signal_received = SIGCHLD;
Ondrej Oprala f6d304b
  	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
Ondrej Oprala f6d304b
--- 3346,3352 ----
Ondrej Oprala f6d304b
  	{
Ondrej Oprala f6d304b
  	  interrupt_immediately = 0;
Ondrej Oprala f6d304b
! 	  /* This was trap_handler (SIGCHLD) but that can lose traps if
Ondrej Oprala f6d304b
! 	     children_exited > 1 */
Ondrej Oprala f6d304b
! 	  queue_sigchld_trap (children_exited);
Ondrej Oprala f6d304b
  	  wait_signal_received = SIGCHLD;
Ondrej Oprala f6d304b
  	  /* If we're in a signal handler, let CHECK_WAIT_INTR pick it up;
Ondrej Oprala f6d304b
*** ../bash-4.3/patchlevel.h	2012-12-29 10:47:57.000000000 -0500
Ondrej Oprala f6d304b
--- patchlevel.h	2014-03-20 20:01:28.000000000 -0400
Ondrej Oprala f6d304b
***************
Ondrej Oprala f6d304b
*** 26,30 ****
Ondrej Oprala f6d304b
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala f6d304b
  
Ondrej Oprala f6d304b
! #define PATCHLEVEL 31
Ondrej Oprala f6d304b
  
Ondrej Oprala f6d304b
  #endif /* _PATCHLEVEL_H_ */
Ondrej Oprala f6d304b
--- 26,30 ----
Ondrej Oprala f6d304b
     looks for to find the patch level (for the sccs version string). */
Ondrej Oprala f6d304b
  
Ondrej Oprala f6d304b
! #define PATCHLEVEL 32
Ondrej Oprala f6d304b
  
Ondrej Oprala f6d304b
  #endif /* _PATCHLEVEL_H_ */