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.