summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2022-04-28 17:03:31 -0700
committerBart Schaefer <schaefer@zsh.org>2022-04-28 17:03:31 -0700
commit0ccc3c149413921fbf5c00696bf350333927eb64 (patch)
tree5c9001364928bf6c2c9152ecd9cd66360878b3aa
parentf59025f8490cc349e73f8d6c088391046115bb92 (diff)
downloadzsh-0ccc3c149413921fbf5c00696bf350333927eb64.tar.gz
zsh-0ccc3c149413921fbf5c00696bf350333927eb64.tar.xz
zsh-0ccc3c149413921fbf5c00696bf350333927eb64.zip
50162: Fix multios with current-shell "exec" (aka nullexec).
-rw-r--r--ChangeLog4
-rw-r--r--Etc/BUGS6
-rw-r--r--Src/exec.c4
3 files changed, 8 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ff17f179..b30b646c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2022-04-28  Bart Schaefer  <schaefer@Macadamia>
+
+	* 50126: Etc/BUGS, Src/exec.c: Fix multios in current-shell "exec"
+
 2022-04-26  dana  <dana@dana.is>
 
 	* unposted: Completion/Unix/Command/_getopt: Fix util-linux
diff --git a/Etc/BUGS b/Etc/BUGS
index 3121fc9fa..b511ec6d6 100644
--- a/Etc/BUGS
+++ b/Etc/BUGS
@@ -46,12 +46,6 @@ interactive and the subshell is the foreground job.  The USEZLE option is
 always turned off in subshells, for reasons lost to history.  There is a
 related, probably obsolete, vared special case for $TERM set to "emacs".
 ------------------------------------------------------------------------
-users/26150: MULTIOS does not work with "exec":
-
-exec 3>/tmp/test1 3>/tmp/test2
-
-causes a script to hang.
-------------------------------------------------------------------------
 47561: [PATCH v4] vcs_info: choose backend by basedir
 ------------------------------------------------------------------------
 39319: () { exit } =(:) doesn't clean up the tempfile
diff --git a/Src/exec.c b/Src/exec.c
index 47753da48..c31089bb5 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3898,6 +3898,10 @@ execcmd_exec(Estate state, Execcmd_params eparams,
 	    for (i = 0; i < 10; i++)
 		if (save[i] != -2)
 		    zclose(save[i]);
+	    /*
+	     * We're done with this job, no need to wait for it.
+	     */
+	    jobtab[thisjob].stat |= STAT_DONE;
 	    goto done;
 	}
 	if (isset(XTRACE)) {