summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/Modules/zpty.c2
-rw-r--r--Src/exec.c1
-rw-r--r--Src/parse.c16
3 files changed, 19 insertions, 0 deletions
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 38da5d500..23b1f4209 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -356,6 +356,8 @@ newptycmd(char *nam, char *pname, char **args, int echo, int block)
 	if (SHTTY != -1)
 	    close(SHTTY);
 
+	closedumps();
+
 	execve(cmd, args, environ);
 	exit(0);
     }
diff --git a/Src/exec.c b/Src/exec.c
index 33f28b53b..7913dec2e 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -356,6 +356,7 @@ zexecve(char *pth, char **argv)
     if (!*eep)
 	eep[1] = NULL;
     *eep = buf;
+    closedumps();
     execve(pth, argv, environ);
 
     /* If the execve returns (which in general shouldn't happen),   *
diff --git a/Src/parse.c b/Src/parse.c
index b9ebad9a7..453e45ad0 100644
--- a/Src/parse.c
+++ b/Src/parse.c
@@ -3030,6 +3030,16 @@ decrdumpcount(FuncDump f)
     }
 }
 
+/**/
+mod_export void
+closedumps(void)
+{
+    FuncDump p;
+
+    for (p = dumps; p; p = p->next)
+	zclose(p->fd);
+}
+
 #else
 
 void
@@ -3042,6 +3052,11 @@ decrdumpcount(FuncDump f)
 {
 }
 
+void
+closedumps(void)
+{
+}
+
 #endif
 
 /**/
@@ -3070,3 +3085,4 @@ dump_autoload(char *nam, char *file, int on, char *ops, int func)
     }
     return ret;
 }
+