about summary refs log tree commit diff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2002-06-07 14:44:21 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2002-06-07 14:44:21 +0000
commit0e08b8c2e485c355acc4818c1b04a81bc7e150be (patch)
tree56936dedd0aa214d20a2909c7ea88db6737e1438 /Src/exec.c
parent37199039b2666815e42072ba934001fadb53b183 (diff)
downloadzsh-0e08b8c2e485c355acc4818c1b04a81bc7e150be.tar.gz
zsh-0e08b8c2e485c355acc4818c1b04a81bc7e150be.tar.xz
zsh-0e08b8c2e485c355acc4818c1b04a81bc7e150be.zip
17299: Use reference counts in Eprogs so as to be able to free them as soon
as finished with.
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/Src/exec.c b/Src/exec.c
index 4888c9fb8..04a141679 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -725,8 +725,11 @@ execode(Eprog p, int dont_change_job, int exiting)
     s.prog = p;
     s.pc = p->prog;
     s.strs = p->strs;
+    useeprog(p);		/* Mark as in use */
 
     execlist(&s, dont_change_job, exiting);
+
+    freeeprog(p);		/* Free if now unused */
 }
 
 /* Execute a simplified command. This is used to execute things that
@@ -3134,6 +3137,7 @@ execfuncdef(Estate state, int do_exec)
     while ((s = (char *) ugetnode(names))) {
 	prog = (Eprog) zalloc(sizeof(*prog));
 	prog->npats = npats;
+	prog->nref = 1; /* allocated from permanent storage */
 	prog->len = len;
 	if (state->prog->dump) {
 	    prog->flags = EF_MAP;