Prevent CLONE from potentially running more than once
Peter Rabbitson [Thu, 26 May 2016 15:02:06 +0000 (17:02 +0200)]
Argh, another thing I didn't know about iThreads: CLONE will run for every
package defining *or inheriting* it. Sigh...

lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/DBI/Cursor.pm
lib/DBIx/Class/_Util.pm
t/lib/DBICTest/Util/LeakTracer.pm

index 302bcca..6c2940c 100644 (file)
@@ -251,7 +251,7 @@ sub new {
     undef;
   }
 
-  sub CLONE {
+  sub DBIx::Class::__DBI_Storage_iThreads_handler__::CLONE {
     # As per DBI's recommendation, DBIC disconnects all handles as
     # soon as possible (DBIC will reconnect only on demand from within
     # the thread)
index 6ea7004..1558559 100644 (file)
@@ -72,7 +72,7 @@ Returns a new L<DBIx::Class::Storage::DBI::Cursor> object.
     return $self;
   }
 
-  sub CLONE {
+  sub DBIx::Class::__DBI_Cursor_iThreads_handler__::CLONE {
     for (keys %cursor_registry) {
       # once marked we no longer care about them, hence no
       # need to keep in the registry, left alone renumber the
index 31f038f..da0d49b 100644 (file)
@@ -437,7 +437,7 @@ sub is_exception ($) {
 {
   my $destruction_registry = {};
 
-  sub CLONE {
+  sub DBIx::Class::__Util_iThreads_handler__::CLONE {
     %$destruction_registry = map {
       (defined $_)
         ? ( refaddr($_) => $_ )
index 8e2e6e8..4873d77 100644 (file)
@@ -73,7 +73,7 @@ sub populate_weakregistry {
 }
 
 # Regenerate the slots names on a thread spawn
-sub CLONE {
+sub DBICTest::__LeakTracer_iThreads_handler__::CLONE {
   my @individual_regs = grep { scalar keys %{$_||{}} } values %reg_of_regs;
   %reg_of_regs = ();