in perl_clone_using, free the prt_table
authorDavid Mitchell <davem@iabyn.com>
Wed, 5 Aug 2009 14:23:41 +0000 (15:23 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 5 Aug 2009 14:48:19 +0000 (15:48 +0100)
*after* we have called any CLONE methods
(better fix for Variable::Magic than 240bfeb992)

(cherry picked from commit b0b93b3c773176a99136baa97661d11503277415)

sv.c

index a251b21..d2fcb0c 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -12109,11 +12109,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 
     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
 
-    if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
-        ptr_table_free(PL_ptr_table);
-        PL_ptr_table = NULL;
-    }
-
     /* Call the ->CLONE method, if it exists, for each of the stashes
        identified by sv_dup() above.
     */
@@ -12133,6 +12128,12 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
        }
     }
 
+    if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
+        ptr_table_free(PL_ptr_table);
+        PL_ptr_table = NULL;
+    }
+
+
     SvREFCNT_dec(param->stashes);
 
     /* orphaned? eg threads->new inside BEGIN or use */