use warnings;
use strict;
+use ANFANG;
use Carp;
use Scalar::Util qw(isweak weaken blessed reftype);
-use DBIx::Class::_Util qw(refcount hrefaddr refdesc);
-use DBIx::Class::Optional::Dependencies;
-use Data::Dumper::Concise;
+use DBIx::Class::_Util qw(refcount hrefaddr refdesc dump_value);
+use DBICTest::RunMode;
use DBICTest::Util qw( stacktrace visit_namespaces );
use constant {
- CV_TRACING => DBIx::Class::Optional::Dependencies->req_ok_for ('test_leaks_heavy'),
+ CV_TRACING => !!(
+ !DBICTest::RunMode->is_plain
+ &&
+ require DBIx::Class::Optional::Dependencies
+ &&
+ DBIx::Class::Optional::Dependencies->req_ok_for ('test_leaks_heavy')
+ ),
};
use base 'Exporter';
# on perl < 5.8.3 sometimes a weaken can throw (can't find RT)
# so guard against that unlikely event
+ local $SIG{__DIE__} if $SIG{__DIE__};
local $@;
eval { weaken( $weak_registry->{$refaddr}{weakref} ); $refs_traced++ }
or delete $weak_registry->{$refaddr};
}
# 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 = ();
$reg->{$new_addr} = $slot_info;
}
}
+
+ # Dummy NEXTSTATE ensuring the all temporaries on the stack are garbage
+ # collected before leaving this scope. Depending on the code above, this
+ # may very well be just a preventive measure guarding future modifications
+ undef;
}
sub visit_refs {
my $type = reftype $r;
+ local $SIG{__DIE__} if $SIG{__DIE__};
local $@;
eval {
if ($type eq 'HASH') {
# in case we hooked bless any extra object creation will wreak
# havoc during the assert phase
local *CORE::GLOBAL::bless;
- *CORE::GLOBAL::bless = sub { CORE::bless( $_[0], (@_ > 1) ? $_[1] : caller() ) };
+ *CORE::GLOBAL::bless = sub { CORE::bless( $_[0], (@_ > 1) ? $_[1] : CORE::caller() ) };
croak 'Expecting a registry hashref' unless ref $weak_registry eq 'HASH';
ref($weak_registry->{$addr}{weakref}) eq 'CODE'
and
B::svref_2object($weak_registry->{$addr}{weakref})->XSUB
- ) ? '__XSUB__' : Dumper( $weak_registry->{$addr}{weakref} )
+ ) ? '__XSUB__' : dump_value $weak_registry->{$addr}{weakref}
;
};
# Devel::MAT::Dumper::dumpfh( $fh );
# close ($fh) or die $!;
#
-# use POSIX;
+# require POSIX;
# POSIX::_exit(1);
# }
}
if (! $quiet and !$leaks_found and ! $tb->in_todo) {
- $tb->ok(1, sprintf "No leaks found at %s line %d", (caller())[1,2] );
+ $tb->ok(1, sprintf "No leaks found at %s line %d", (CORE::caller())[1,2] );
}
}