diff options
Diffstat (limited to 'pad.c')
-rw-r--r-- | pad.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -457,8 +457,11 @@ Perl_cv_undef_flags(pTHX_ CV *cv, U32 flags) Safefree(padlist); CvPADLIST_set(&cvbody, NULL); } - else if (CvISXSUB(&cvbody)) + else if (CvISXSUB(&cvbody)) { + if (CvREFCOUNTED_ANYSV(&cvbody)) + SvREFCNT_dec(CvXSUBANY(&cvbody).any_sv); CvHSCXT(&cvbody) = NULL; + } /* else is (!CvISXSUB(&cvbody) && !CvPADLIST(&cvbody)) {do nothing;} */ @@ -2201,6 +2204,8 @@ S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned) if (UNLIKELY(CvISXSUB(proto))) { CvXSUB(cv) = CvXSUB(proto); CvXSUBANY(cv) = CvXSUBANY(proto); + if (CvREFCOUNTED_ANYSV(cv)) + SvREFCNT_inc(CvXSUBANY(cv).any_sv); } else { OP_REFCNT_LOCK; |