__PACKAGE__->mk_group_accessors(inherited => '_skip_namespace_frames');
__PACKAGE__->_skip_namespace_frames('^DBIx::Class|^SQL::Abstract|^Try::Tiny|^Class::Accessor::Grouped|^Context::Preserve');
+# FIXME - this is not really necessary, and is in
+# fact going to slow things down a bit
+# However it is the right thing to do in order to get
+# various install bases to highlight their brokenness
+# Remove at some unknown point in the future
+sub DESTROY { &DBIx::Class::_Util::detected_reinvoked_destructor }
+
sub mk_classdata {
shift->mk_classaccessor(@_);
}
use strict;
use warnings;
-use DBIx::Class::_Util 'detect_reinvoked_destructor';
+use DBIx::Class::_Util 'detected_reinvoked_destructor';
use namespace::clean;
sub DESTROY {
- return if &detect_reinvoked_destructor;
+ return if &detected_reinvoked_destructor;
my ($self) = @_;
my $class = ref $self;
my $global_phase_destroy;
sub DESTROY {
- ### NO detect_reinvoked_destructor check
+ ### NO detected_reinvoked_destructor check
### This code very much relies on being called multuple times
return if $global_phase_destroy ||= in_global_destruction;
my $global_phase_destroy;
sub DESTROY {
- ### NO detect_reinvoked_destructor check
+ ### NO detected_reinvoked_destructor check
### This code very much relies on being called multuple times
return if $global_phase_destroy ||= in_global_destruction;
use Context::Preserve 'preserve_context';
use Try::Tiny;
use SQL::Abstract qw(is_plain_value is_literal_value);
-use DBIx::Class::_Util qw(quote_sub perlstring serialize detect_reinvoked_destructor);
+use DBIx::Class::_Util qw(quote_sub perlstring serialize detected_reinvoked_destructor);
use namespace::clean;
# default cursor class, overridable in connect_info attributes
}
sub DESTROY {
- return if &detect_reinvoked_destructor;
+ return if &detected_reinvoked_destructor;
$_[0]->_verify_pid unless DBIx::Class::_ENV_::BROKEN_FORK;
# some databases spew warnings on implicit disconnect
use Try::Tiny;
use Scalar::Util qw(refaddr weaken);
use List::Util 'shuffle';
-use DBIx::Class::_Util 'detect_reinvoked_destructor';
+use DBIx::Class::_Util 'detected_reinvoked_destructor';
use namespace::clean;
__PACKAGE__->mk_group_accessors('simple' =>
sub DESTROY {
- return if &detect_reinvoked_destructor;
+ return if &detected_reinvoked_destructor;
$_[0]->__finish_sth if $_[0]->{sth};
}
use Try::Tiny;
use Scalar::Util qw(weaken blessed refaddr);
use DBIx::Class;
-use DBIx::Class::_Util qw(is_exception detect_reinvoked_destructor);
+use DBIx::Class::_Util qw(is_exception detected_reinvoked_destructor);
use DBIx::Class::Carp;
use namespace::clean;
}
sub DESTROY {
- return if &detect_reinvoked_destructor;
+ return if &detected_reinvoked_destructor;
my $self = shift;
our @EXPORT_OK = qw(
sigwarn_silencer modver_gt_or_eq modver_gt_or_eq_and_lt
fail_on_internal_wantarray fail_on_internal_call
- refdesc refcount hrefaddr is_exception detect_reinvoked_destructor
+ refdesc refcount hrefaddr is_exception detected_reinvoked_destructor
quote_sub qsub perlstring serialize deep_clone
UNRESOLVABLE_CONDITION
);
# This is almost invariably invoked from within DESTROY
# throwing exceptions won't work
- sub detect_reinvoked_destructor {
+ sub detected_reinvoked_destructor {
# quick "garbage collection" pass - prevents the registry
# from slowly growing with a bunch of undef-valued keys
defined $destruction_registry->{$_} or delete $destruction_registry->{$_}
for keys %$destruction_registry;
- unless (length ref $_[0]) {
- printf STDERR '%s() expects a reference %s',
+ if (! length ref $_[0]) {
+ printf STDERR '%s() expects a blessed reference %s',
(caller(0))[3],
Carp::longmess,
;
return undef; # don't know wtf to do
}
-
- if (! defined $destruction_registry->{ my $addr = refaddr($_[0]) } ) {
+ elsif (! defined $destruction_registry->{ my $addr = refaddr($_[0]) } ) {
weaken( $destruction_registry->{$addr} = $_[0] );
return 0;
}
use DBICTest::Util 'local_umask';
use DBICTest::Schema;
use DBICTest::Util::LeakTracer qw/populate_weakregistry assert_empty_weakregistry/;
+use DBIx::Class::_Util 'detected_reinvoked_destructor';
use Carp;
use Path::Class::File ();
use File::Spec;
$dbh->{Callbacks} = {
connect => sub { $guard_cb->('connect') },
disconnect => sub { $guard_cb->('disconnect') },
- DESTROY => sub { $guard_cb->('DESTROY') },
+ DESTROY => sub { &detected_reinvoked_destructor; $guard_cb->('DESTROY') },
};
}
},
use Config;
use Carp 'confess';
use Scalar::Util qw(blessed refaddr);
+use DBIx::Class::_Util;
use base 'Exporter';
our @EXPORT_OK = qw(local_umask stacktrace check_customcond_args visit_namespaces);
{
package DBICTest::Util::UmaskGuard;
sub DESTROY {
+ &DBIx::Class::_Util::detected_reinvoked_destructor;
+
local ($@, $!);
eval { defined (umask ${$_[0]}) or die };
warn ( "Unable to reset old umask ${$_[0]}: " . ($!||'Unknown error') )