Change 20930 by [EMAIL PROTECTED] on 2003/08/29 12:57:07

        Subject: [PATCH op.c] Perl_newCONSTSUB() related memory leaks
        From: "Marcus Holland-Moritz" <[EMAIL PROTECTED]>
        Date: Thu, 28 Aug 2003 21:47:22 +0200
        Message-ID: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/op.c#581 edit

Differences ...

==== //depot/perl/op.c#581 (text) ====
Index: perl/op.c
--- perl/op.c#580~20591~        Sat Aug  9 14:08:59 2003
+++ perl/op.c   Fri Aug 29 05:57:07 2003
@@ -3796,6 +3796,8 @@
     return o;
 }
 
+static void const_sv_xsub(pTHX_ CV* cv);
+
 /*
 =for apidoc cv_undef
 
@@ -3811,8 +3813,9 @@
 Perl_cv_undef(pTHX_ CV *cv)
 {
 #ifdef USE_ITHREADS
-    if (CvFILE(cv) && !CvXSUB(cv)) {
-       /* for XSUBs CvFILE point directly to static memory; __FILE__ */
+    if (CvFILE(cv) && (!CvXSUB(cv) || CvXSUB(cv) == const_sv_xsub)) {
+       /* for XSUBs CvFILE point directly to static memory; __FILE__ 
+        * except when XSUB was constructed via newCONSTSUB() */
        Safefree(CvFILE(cv));
     }
     CvFILE(cv) = 0;
@@ -3874,8 +3877,6 @@
     }
 }
 
-static void const_sv_xsub(pTHX_ CV* cv);
-
 /*
 
 =head1 Optree Manipulation Functions
@@ -4358,6 +4359,9 @@
     CvXSUBANY(cv).any_ptr = sv;
     CvCONST_on(cv);
     sv_setpv((SV*)cv, "");  /* prototype is "" */
+
+    if (stash)
+       CopSTASH_free(PL_curcop);
 
     LEAVE;
 
End of Patch.

Reply via email to