This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: thread free problem
authorJerry D. Hedden <jdhedden@cpan.org>
Mon, 20 Nov 2006 07:32:36 +0000 (23:32 -0800)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Mon, 20 Nov 2006 16:05:33 +0000 (16:05 +0000)
From: "Jerry D. Hedden" <jdhedden@yahoo.com>
Message-ID: <696736.39963.qm@web30204.mail.mud.yahoo.com>

p4raw-id: //depot/perl@29329

op.c

diff --git a/op.c b/op.c
index 5325a5a..32bf1d8 100644 (file)
--- a/op.c
+++ b/op.c
@@ -490,7 +490,16 @@ clear_pmop:
 STATIC void
 S_cop_free(pTHX_ COP* cop)
 {
 STATIC void
 S_cop_free(pTHX_ COP* cop)
 {
-    Safefree(cop->cop_label);   /* FIXME: treaddead ??? */
+    if (cop->cop_label) {
+#ifdef PERL_TRACK_MEMPOOL
+       Malloc_t ptr = (Malloc_t)(cop->cop_label - sTHX);
+       struct perl_memory_debug_header *const header
+               = (struct perl_memory_debug_header *)ptr;
+       /* Only the thread that allocated us can free us. */
+       if (header->interpreter == aTHX)
+#endif
+           Safefree(cop->cop_label);
+    }
     CopFILE_free(cop);
     CopSTASH_free(cop);
     if (! specialWARN(cop->cop_warnings))
     CopFILE_free(cop);
     CopSTASH_free(cop);
     if (! specialWARN(cop->cop_warnings))