]> git.pld-linux.org Git - packages/bash.git/blame - bash40-019
- /usr/share/bash/* are doc; rel 3
[packages/bash.git] / bash40-019
CommitLineData
fb8ce753
AM
1 BASH PATCH REPORT
2 =================
3
4Bash-Release: 4.0
5Patch-ID: bash40-019
6
7Bug-Reported-by: Oleksiy Melnyk <lex@upc.ua>
8Bug-Reference-ID: <20090224142233.D2FEFC004@floyd.upc.ua>
9Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2009-02/msg00200.html
10
11Bug-Description:
12
13Using an external command as part of the DEBUG trap when job control is
14enabled causes pipelines to misbehave. The problem has to do with process
15groups assigned to the pipeline and terminal.
16
17Patch:
18
19*** ../bash-4.0-patched/jobs.c 2009-01-29 17:09:49.000000000 -0500
20--- jobs.c 2009-04-17 21:08:20.000000000 -0400
21***************
22*** 443,447 ****
23 the_pipeline = saved_pipeline;
24 already_making_children = saved_already_making_children;
25! if (discard)
26 discard_pipeline (old_pipeline);
27 }
28--- 443,447 ----
29 the_pipeline = saved_pipeline;
30 already_making_children = saved_already_making_children;
31! if (discard && old_pipeline)
32 discard_pipeline (old_pipeline);
33 }
34***************
35*** 4203,4205 ****
36--- 4204,4225 ----
37 }
38
39+ void
40+ save_pgrp_pipe (p, clear)
41+ int *p;
42+ int clear;
43+ {
44+ p[0] = pgrp_pipe[0];
45+ p[1] = pgrp_pipe[1];
46+ if (clear)
47+ pgrp_pipe[0] = pgrp_pipe[1] = -1;
48+ }
49+
50+ void
51+ restore_pgrp_pipe (p)
52+ int *p;
53+ {
54+ pgrp_pipe[0] = p[0];
55+ pgrp_pipe[1] = p[1];
56+ }
57+
58 #endif /* PGRP_PIPE */
59*** ../bash-4.0-patched/jobs.h 2009-01-04 14:32:29.000000000 -0500
60--- jobs.h 2009-04-17 15:07:51.000000000 -0400
61***************
62*** 236,239 ****
63--- 236,241 ----
64
65 extern void close_pgrp_pipe __P((void));
66+ extern void save_pgrp_pipe __P((int *, int));
67+ extern void restore_pgrp_pipe __P((int *));
68
69 #if defined (JOB_CONTROL)
70*** ../bash-4.0-patched/trap.c 2009-01-16 17:07:53.000000000 -0500
71--- trap.c 2009-04-17 22:22:36.000000000 -0400
72***************
73*** 799,802 ****
74--- 799,804 ----
75 {
76 int trap_exit_value;
77+ pid_t save_pgrp;
78+ int save_pipe[2];
79
80 /* XXX - question: should the DEBUG trap inherit the RETURN trap? */
81***************
82*** 804,808 ****
83--- 806,832 ----
84 if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && ((sigmodes[DEBUG_TRAP] & SIG_IGNORED) == 0) && ((sigmodes[DEBUG_TRAP] & SIG_INPROGRESS) == 0))
85 {
86+ #if defined (JOB_CONTROL)
87+ save_pgrp = pipeline_pgrp;
88+ pipeline_pgrp = 0;
89+ save_pipeline (1);
90+ # if defined (PGRP_PIPE)
91+ save_pgrp_pipe (save_pipe, 1);
92+ # endif
93+ stop_making_children ();
94+ #endif
95+
96 trap_exit_value = _run_trap_internal (DEBUG_TRAP, "debug trap");
97+
98+ #if defined (JOB_CONTROL)
99+ pipeline_pgrp = save_pgrp;
100+ restore_pipeline (1);
101+ # if defined (PGRP_PIPE)
102+ close_pgrp_pipe ();
103+ restore_pgrp_pipe (save_pipe);
104+ # endif
105+ if (pipeline_pgrp > 0)
106+ give_terminal_to (pipeline_pgrp, 1);
107+ notify_and_cleanup ();
108+ #endif
109
110 #if defined (DEBUGGER)
111*** ../bash-4.0/patchlevel.h 2009-01-04 14:32:40.000000000 -0500
112--- patchlevel.h 2009-02-22 16:11:31.000000000 -0500
113***************
114*** 26,30 ****
115 looks for to find the patch level (for the sccs version string). */
116
117! #define PATCHLEVEL 18
118
119 #endif /* _PATCHLEVEL_H_ */
120--- 26,30 ----
121 looks for to find the patch level (for the sccs version string). */
122
123! #define PATCHLEVEL 19
124
125 #endif /* _PATCHLEVEL_H_ */
This page took 0.169927 seconds and 4 git commands to generate.