diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2002-06-07 14:44:21 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2002-06-07 14:44:21 +0000 |
commit | 0e08b8c2e485c355acc4818c1b04a81bc7e150be (patch) | |
tree | 56936dedd0aa214d20a2909c7ea88db6737e1438 /Src/exec.c | |
parent | 37199039b2666815e42072ba934001fadb53b183 (diff) | |
download | zsh-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.c | 4 |
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; |