summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1998-07-18 08:48:13 +0000
committerGurusamy Sarathy <gsar@cpan.org>1998-07-18 08:48:13 +0000
commitf7ac0805bb97e1e2d7fa37a2ffc86ce9bd5c6350 (patch)
tree6d4919198f8df8e681d1b5b8e762aa295193ed53
parentd91ab1730ab6e32cf51b06d50df160328772fd3d (diff)
downloadperl-f7ac0805bb97e1e2d7fa37a2ffc86ce9bd5c6350.tar.gz
fix yet another USE_THREADS leak due to failure to free stacks
p4raw-id: //depot/perl@1531
-rw-r--r--ext/Thread/Thread.xs12
-rw-r--r--util.c2
2 files changed, 12 insertions, 2 deletions
diff --git a/ext/Thread/Thread.xs b/ext/Thread/Thread.xs
index 5d47cd0251..34aee1bdef 100644
--- a/ext/Thread/Thread.xs
+++ b/ext/Thread/Thread.xs
@@ -150,11 +150,20 @@ threadstart(void *arg)
SvREFCNT_dec(thr->errsv);
SvREFCNT_dec(thr->errhv);
+ /*Safefree(cxstack);*/
+ while (curstackinfo->si_next)
+ curstackinfo = curstackinfo->si_next;
+ while (curstackinfo) {
+ PERL_SI *p = curstackinfo->si_prev;
+ SvREFCNT_dec(curstackinfo->si_stack);
+ Safefree(curstackinfo->si_cxstack);
+ Safefree(curstackinfo);
+ curstackinfo = p;
+ }
Safefree(markstack);
Safefree(scopestack);
Safefree(savestack);
Safefree(retstack);
- Safefree(cxstack);
Safefree(tmps_stack);
Safefree(ofs);
@@ -165,6 +174,7 @@ threadstart(void *arg)
Safefree(screamnext);
Safefree(reg_start_tmp);
SvREFCNT_dec(lastscream);
+ /*SvREFCNT_dec(defoutgv);*/
MUTEX_LOCK(&thr->mutex);
DEBUG_L(PerlIO_printf(PerlIO_stderr(),
diff --git a/util.c b/util.c
index eb52ee5a2c..af6f137bf3 100644
--- a/util.c
+++ b/util.c
@@ -2784,7 +2784,7 @@ new_struct_thread(struct perl_thread *t)
curpm = t->Tcurpm; /* XXX No PMOP ref count */
nrs = newSVsv(t->Tnrs);
rs = SvREFCNT_inc(nrs);
- last_in_gv = (GV*)SvREFCNT_inc(t->Tlast_in_gv);
+ last_in_gv = Nullgv;
ofslen = t->Tofslen;
ofs = savepvn(t->Tofs, ofslen);
defoutgv = (GV*)SvREFCNT_inc(t->Tdefoutgv);