From 28a962f557952a6001d37f4f4f7034361d11bf89 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 23 Jul 2015 09:34:11 +0100 Subject: 35849: close fd's from process substitution after fork Leaving these hanging in parent could cause deadlock: test added. --- Src/exec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Src/exec.c') diff --git a/Src/exec.c b/Src/exec.c index 4eee82bf1..7612d4303 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3047,6 +3047,7 @@ execcmd(Estate state, int input, int output, int how, int last1) addproc(pid, text, 0, &bgtime); if (oautocont >= 0) opts[AUTOCONTINUE] = oautocont; + pipecleanfilelist(jobtab[thisjob].filelist, 1); return; } /* pid == 0 */ @@ -3492,7 +3493,7 @@ execcmd(Estate state, int input, int output, int how, int last1) if (is_shfunc) { /* It's a shell function */ - pipecleanfilelist(filelist); + pipecleanfilelist(filelist, 0); execshfunc((Shfunc) hn, args); } else { /* It's a builtin */ @@ -3682,7 +3683,7 @@ execcmd(Estate state, int input, int output, int how, int last1) DPUTS(varspc, "BUG: assignment before complex command"); list_pipe = 0; - pipecleanfilelist(filelist); + pipecleanfilelist(filelist, 0); /* If we're forked (and we should be), no need to return */ DPUTS(last1 != 1 && !forked, "BUG: not exiting?"); DPUTS(type != WC_SUBSH, "Not sure what we're doing."); -- cgit 1.4.1