in change#10451, check that CvOUTSIDE is a CV before looking in
Gurusamy Sarathy [Thu, 7 Jun 2001 20:01:31 +0000 (20:01 +0000)]
(it can apparently be SVt_NULL during global destruction)

p4raw-link: @10451 on //depot/maint-5.6/perl: 03f9d59115e90b0796ba7943655c020a829c11bf

p4raw-id: //depot/perl@10471

op.c

diff --git a/op.c b/op.c
index 08e2ed4..6e42527 100644 (file)
--- a/op.c
+++ b/op.c
@@ -4180,7 +4180,8 @@ Perl_cv_undef(pTHX_ CV *cv)
      * apply to closures generated within eval"", since eval"" CVs are
      * ephemeral. --GSAR */
     if (!CvANON(cv) || CvCLONED(cv)
-       || (CvOUTSIDE(cv) && CvEVAL(CvOUTSIDE(cv)) && !CvGV(CvOUTSIDE(cv))))
+       || (CvOUTSIDE(cv) && SvTYPE(CvOUTSIDE(cv)) == SVt_PVCV
+           && CvEVAL(CvOUTSIDE(cv)) && !CvGV(CvOUTSIDE(cv))))
     {
        SvREFCNT_dec(CvOUTSIDE(cv));
     }
@@ -4828,7 +4829,8 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
      * lifetime of the outer CV.  Avoids memory leak due to reference
      * loop. --GSAR */
     if (!name && CvOUTSIDE(cv)
-       && !(CvEVAL(CvOUTSIDE(cv)) && !CvGV(CvOUTSIDE(cv))))
+       && !(SvTYPE(CvOUTSIDE(cv)) == SVt_PVCV
+            && CvEVAL(CvOUTSIDE(cv)) && !CvGV(CvOUTSIDE(cv))))
     {
        SvREFCNT_dec(CvOUTSIDE(cv));
     }