BASH PATCH REPORT ================= Bash-Release: 3.1 Patch-ID: bash31-009 Bug-Reported-by: Joshua Neuheisel Bug-Reference-ID: <25d873330601140820v4ad8efd2t8bf683b073c138b3@mail.gmail.com> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-01/msg00062.html Bug-Description: Under some circumstances, background (asynchronous) jobs can set the terminal process group incorrectly. This can cause a foreground process (including the foreground shell) to get read errors and exit. Patch: *** bash-3.1/jobs.c Fri Nov 11 23:13:27 2005 --- bash-3.1/jobs.c Wed Feb 1 13:55:38 2006 *************** *** 620,625 **** * the parent gives it away. * */ ! if (job_control && newjob->pgrp) give_terminal_to (newjob->pgrp, 0); } --- 634,642 ---- * the parent gives it away. * + * Don't give the terminal away if this shell is an asynchronous + * subshell. + * */ ! if (job_control && newjob->pgrp && (subshell_environment&SUBSHELL_ASYNC) == 0) give_terminal_to (newjob->pgrp, 0); } *************** *** 1656,1660 **** shell's process group (we could be in the middle of a pipeline, for example). */ ! if (async_p == 0 && pipeline_pgrp != shell_pgrp) give_terminal_to (pipeline_pgrp, 0); --- 1743,1747 ---- shell's process group (we could be in the middle of a pipeline, for example). */ ! if (async_p == 0 && pipeline_pgrp != shell_pgrp && ((subshell_environment&SUBSHELL_ASYNC) == 0)) give_terminal_to (pipeline_pgrp, 0); *** bash-3.1/patchlevel.h Wed Jul 20 13:58:20 2005 --- bash-3.1/patchlevel.h Wed Dec 7 13:48:42 2005 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 8 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 9 #endif /* _PATCHLEVEL_H_ */