From e0cdf39fd9cbf056bd95eb08590addf8d40c155b Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 24 Apr 2015 16:34:51 +0100 Subject: 34955: save and restore list_pipe_job with its friends This is needed to stop source() messing up job control. --- Src/exec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Src') diff --git a/Src/exec.c b/Src/exec.c index 2a8185cbc..60b79c6ea 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1146,7 +1146,7 @@ execlist(Estate state, int dont_change_job, int exiting) Wordcode next; wordcode code; int ret, cj, csp, ltype; - int old_pline_level, old_list_pipe; + int old_pline_level, old_list_pipe, old_list_pipe_job; zlong oldlineno; /* * ERREXIT only forces the shell to exit if the last command in a && @@ -1159,10 +1159,11 @@ execlist(Estate state, int dont_change_job, int exiting) cj = thisjob; old_pline_level = pline_level; old_list_pipe = list_pipe; + old_list_pipe_job = list_pipe_job; oldlineno = lineno; if (sourcelevel && unset(SHINSTDIN)) - pline_level = list_pipe = 0; + pline_level = list_pipe = list_pipe_job = 0; /* Loop over all sets of comands separated by newline, * * semi-colon or ampersand (`sublists'). */ @@ -1397,6 +1398,7 @@ sublist_done: } pline_level = old_pline_level; list_pipe = old_list_pipe; + list_pipe_job = old_list_pipe_job; lineno = oldlineno; if (dont_change_job) thisjob = cj; -- cgit 1.4.1