Tomas Janousek 5a0cfd1
			     BASH PATCH REPORT
Tomas Janousek 5a0cfd1
			     =================
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
Bash-Release: 3.2
Tomas Janousek 5a0cfd1
Patch-ID: bash32-018
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
Bug-Reported-by:	osicka@post.cz
Tomas Janousek 5a0cfd1
Bug-Reference-ID:	<228.177-19682-1132061412-1179356692@post.cz>
Tomas Janousek 5a0cfd1
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
Bug-Description:
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
In certain cases, bash can lose the saved status of a background job, though
Tomas Janousek 5a0cfd1
it should still be reported by `wait'.  Bash can also loop infinitely after
Tomas Janousek 5a0cfd1
creating and waiting for 4096 jobs.
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
Patch:
Tomas Janousek 5a0cfd1
Tomas Janousek 5a0cfd1
*** ../bash-20070510/jobs.c	Thu Mar  8 16:05:50 2007
Tomas Janousek 5a0cfd1
--- jobs.c	Fri May 18 11:40:14 2007
Tomas Janousek 5a0cfd1
***************
Tomas Janousek 5a0cfd1
*** 784,792 ****
Tomas Janousek 5a0cfd1
      {
Tomas Janousek 5a0cfd1
        old = js.j_firstj++;
Tomas Janousek 5a0cfd1
        while (js.j_firstj != old)
Tomas Janousek 5a0cfd1
  	{
Tomas Janousek 5a0cfd1
  	  if (js.j_firstj >= js.j_jobslots)
Tomas Janousek 5a0cfd1
  	    js.j_firstj = 0;
Tomas Janousek 5a0cfd1
! 	  if (jobs[js.j_firstj])
Tomas Janousek 5a0cfd1
  	    break;
Tomas Janousek 5a0cfd1
  	  js.j_firstj++;
Tomas Janousek 5a0cfd1
--- 784,794 ----
Tomas Janousek 5a0cfd1
      {
Tomas Janousek 5a0cfd1
        old = js.j_firstj++;
Tomas Janousek 5a0cfd1
+       if (old >= js.j_jobslots)
Tomas Janousek 5a0cfd1
+ 	old = js.j_jobslots - 1;
Tomas Janousek 5a0cfd1
        while (js.j_firstj != old)
Tomas Janousek 5a0cfd1
  	{
Tomas Janousek 5a0cfd1
  	  if (js.j_firstj >= js.j_jobslots)
Tomas Janousek 5a0cfd1
  	    js.j_firstj = 0;
Tomas Janousek 5a0cfd1
! 	  if (jobs[js.j_firstj] || js.j_firstj == old)	/* needed if old == 0 */
Tomas Janousek 5a0cfd1
  	    break;
Tomas Janousek 5a0cfd1
  	  js.j_firstj++;
Tomas Janousek 5a0cfd1
***************
Tomas Janousek 5a0cfd1
*** 798,806 ****
Tomas Janousek 5a0cfd1
      {
Tomas Janousek 5a0cfd1
        old = js.j_lastj--;
Tomas Janousek 5a0cfd1
        while (js.j_lastj != old)
Tomas Janousek 5a0cfd1
  	{
Tomas Janousek 5a0cfd1
  	  if (js.j_lastj < 0)
Tomas Janousek 5a0cfd1
  	    js.j_lastj = js.j_jobslots - 1;
Tomas Janousek 5a0cfd1
! 	  if (jobs[js.j_lastj])
Tomas Janousek 5a0cfd1
  	    break;
Tomas Janousek 5a0cfd1
  	  js.j_lastj--;
Tomas Janousek 5a0cfd1
--- 800,810 ----
Tomas Janousek 5a0cfd1
      {
Tomas Janousek 5a0cfd1
        old = js.j_lastj--;
Tomas Janousek 5a0cfd1
+       if (old < 0)
Tomas Janousek 5a0cfd1
+ 	old = 0;
Tomas Janousek 5a0cfd1
        while (js.j_lastj != old)
Tomas Janousek 5a0cfd1
  	{
Tomas Janousek 5a0cfd1
  	  if (js.j_lastj < 0)
Tomas Janousek 5a0cfd1
  	    js.j_lastj = js.j_jobslots - 1;
Tomas Janousek 5a0cfd1
! 	  if (jobs[js.j_lastj] || js.j_lastj == old)	/* needed if old == js.j_jobslots */
Tomas Janousek 5a0cfd1
  	    break;
Tomas Janousek 5a0cfd1
  	  js.j_lastj--;
Tomas Janousek 5a0cfd1
***************
Tomas Janousek 5a0cfd1
*** 964,968 ****
Tomas Janousek 5a0cfd1
    realloc_jobs_list ();
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
!   return (js.j_lastj);
Tomas Janousek 5a0cfd1
  }
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
--- 975,983 ----
Tomas Janousek 5a0cfd1
    realloc_jobs_list ();
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
! #ifdef DEBUG
Tomas Janousek 5a0cfd1
!   itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);
Tomas Janousek 5a0cfd1
! #endif
Tomas Janousek 5a0cfd1
! 
Tomas Janousek 5a0cfd1
!   return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);
Tomas Janousek 5a0cfd1
  }
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
Tomas Janousek 5a0cfd1
--- patchlevel.h	Mon Oct 16 14:22:54 2006
Tomas Janousek 5a0cfd1
***************
Tomas Janousek 5a0cfd1
*** 26,30 ****
Tomas Janousek 5a0cfd1
     looks for to find the patch level (for the sccs version string). */
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
! #define PATCHLEVEL 17
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
  #endif /* _PATCHLEVEL_H_ */
Tomas Janousek 5a0cfd1
--- 26,30 ----
Tomas Janousek 5a0cfd1
     looks for to find the patch level (for the sccs version string). */
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
! #define PATCHLEVEL 18
Tomas Janousek 5a0cfd1
  
Tomas Janousek 5a0cfd1
  #endif /* _PATCHLEVEL_H_ */