diff options
Diffstat (limited to 'data/bash/bash40-019')
-rw-r--r-- | data/bash/bash40-019 | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/data/bash/bash40-019 b/data/bash/bash40-019 deleted file mode 100644 index 30efd6806..000000000 --- a/data/bash/bash40-019 +++ /dev/null @@ -1,125 +0,0 @@ - BASH PATCH REPORT - ================= - -Bash-Release: 4.0 -Patch-ID: bash40-019 - -Bug-Reported-by: Oleksiy Melnyk <lex@upc.ua> -Bug-Reference-ID: <20090224142233.D2FEFC004@floyd.upc.ua> -Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00200.html - -Bug-Description: - -Using an external command as part of the DEBUG trap when job control is -enabled causes pipelines to misbehave. The problem has to do with process -groups assigned to the pipeline and terminal. - -Patch: - -*** ../bash-4.0-patched/jobs.c 2009-01-29 17:09:49.000000000 -0500 ---- jobs.c 2009-04-17 21:08:20.000000000 -0400 -*************** -*** 443,447 **** - the_pipeline = saved_pipeline; - already_making_children = saved_already_making_children; -! if (discard) - discard_pipeline (old_pipeline); - } ---- 443,447 ---- - the_pipeline = saved_pipeline; - already_making_children = saved_already_making_children; -! if (discard && old_pipeline) - discard_pipeline (old_pipeline); - } -*************** -*** 4203,4205 **** ---- 4204,4225 ---- - } - -+ void -+ save_pgrp_pipe (p, clear) -+ int *p; -+ int clear; -+ { -+ p[0] = pgrp_pipe[0]; -+ p[1] = pgrp_pipe[1]; -+ if (clear) -+ pgrp_pipe[0] = pgrp_pipe[1] = -1; -+ } -+ -+ void -+ restore_pgrp_pipe (p) -+ int *p; -+ { -+ pgrp_pipe[0] = p[0]; -+ pgrp_pipe[1] = p[1]; -+ } -+ - #endif /* PGRP_PIPE */ -*** ../bash-4.0-patched/jobs.h 2009-01-04 14:32:29.000000000 -0500 ---- jobs.h 2009-04-17 15:07:51.000000000 -0400 -*************** -*** 236,239 **** ---- 236,241 ---- - - extern void close_pgrp_pipe __P((void)); -+ extern void save_pgrp_pipe __P((int *, int)); -+ extern void restore_pgrp_pipe __P((int *)); - - #if defined (JOB_CONTROL) -*** ../bash-4.0-patched/trap.c 2009-01-16 17:07:53.000000000 -0500 ---- trap.c 2009-04-17 22:22:36.000000000 -0400 -*************** -*** 799,802 **** ---- 799,804 ---- - { - int trap_exit_value; -+ pid_t save_pgrp; -+ int save_pipe[2]; - - /* XXX - question: should the DEBUG trap inherit the RETURN trap? */ -*************** -*** 804,808 **** ---- 806,832 ---- - if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && ((sigmodes[DEBUG_TRAP] & SIG_IGNORED) == 0) && ((sigmodes[DEBUG_TRAP] & SIG_INPROGRESS) == 0)) - { -+ #if defined (JOB_CONTROL) -+ save_pgrp = pipeline_pgrp; -+ pipeline_pgrp = 0; -+ save_pipeline (1); -+ # if defined (PGRP_PIPE) -+ save_pgrp_pipe (save_pipe, 1); -+ # endif -+ stop_making_children (); -+ #endif -+ - trap_exit_value = _run_trap_internal (DEBUG_TRAP, "debug trap"); -+ -+ #if defined (JOB_CONTROL) -+ pipeline_pgrp = save_pgrp; -+ restore_pipeline (1); -+ # if defined (PGRP_PIPE) -+ close_pgrp_pipe (); -+ restore_pgrp_pipe (save_pipe); -+ # endif -+ if (pipeline_pgrp > 0) -+ give_terminal_to (pipeline_pgrp, 1); -+ notify_and_cleanup (); -+ #endif - - #if defined (DEBUGGER) -*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500 ---- patchlevel.h 2009-02-22 16:11:31.000000000 -0500 -*************** -*** 26,30 **** - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 18 - - #endif /* _PATCHLEVEL_H_ */ ---- 26,30 ---- - looks for to find the patch level (for the sccs version string). */ - -! #define PATCHLEVEL 19 - - #endif /* _PATCHLEVEL_H_ */ |