diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-12 16:04:47 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-12 16:04:47 +0000 |
commit | 282f25c977e1960e4e088425df8229fa6a4a7563 (patch) | |
tree | 7a794b96486fbe8f27d0860af1dadc2c79e432aa /sv.c | |
parent | fd5f5d222ad399d968d7e5e208df1abd8e5e88ea (diff) | |
download | perl-282f25c977e1960e4e088425df8229fa6a4a7563.tar.gz |
Integrate change #9108 from maintperl to mainline.
fix memory leak in C<sub X { sub {} }> arising from a refcount
loop between the outer sub and the inner prototype anonsub
this also enables closures returned by subroutines that
subsequently get redefined to work without generating coredumps :)
completely removed the free_closures() hack--it shouldn't be
needed anymore
p4raw-link: @9108 on //depot/maint-5.6/perl: 1cf1f64f42eb50a67f2427ff9d6d24023a2b9997
p4raw-id: //depot/perl@9109
p4raw-branched: from //depot/maint-5.6/perl@9107 'branch in'
t/op/anonsub.t
p4raw-integrated: from //depot/maint-5.6/perl@9107 'merge in' sv.c
(@8871..) embed.h (@8886..) pod/perlapi.pod proto.h (@8993..)
embed.pl (@8995..) MANIFEST (@9030..) op.c op.h (@9055..)
pp_ctl.c (@9076..)
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -8179,7 +8179,10 @@ dup_pvcv: } else CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr)); - CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr)); + if (!CvANON(sstr) || CvCLONED(sstr)) + CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr)); + else + CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr)); CvFLAGS(dstr) = CvFLAGS(sstr); break; default: |