summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2003-03-18 21:55:05 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2003-03-18 21:59:33 +0000
commit5023d17a8090433133a90a5ff33272f2f429614f (patch)
treea98904b930f7eea7d7b53040cfd4c45434716fb1 /pp_ctl.c
parentaaa028762b1d77e102995e3005ce437a64e9d27f (diff)
downloadperl-5023d17a8090433133a90a5ff33272f2f429614f.tar.gz
[perl #9990] avoid goto &tmpsub coredump
Message-ID: <20030318215505.A16787@fdgroup.com> p4raw-id: //depot/perl@19025
Diffstat (limited to 'pp_ctl.c')
-rw-r--r--pp_ctl.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 5143391289..a35d600530 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2203,6 +2203,7 @@ PP(pp_goto)
}
/* First do some returnish stuff. */
+ SvREFCNT_inc(cv); /* avoid premature free during unwind */
FREETMPS;
cxix = dopoptosub(cxstack_ix);
if (cxix < 0)
@@ -2250,6 +2251,7 @@ PP(pp_goto)
/* Now do some callish stuff. */
SAVETMPS;
+ SAVEFREESV(cv); /* later, undo the 'avoid premature free' hack */
if (CvXSUB(cv)) {
#ifdef PERL_XSUB_OLDSTYLE
if (CvOLDSTYLE(cv)) {