Use the now pure-perlized Devel::GlobalDestroy module
Peter Rabbitson [Fri, 27 Apr 2012 07:00:42 +0000 (09:00 +0200)]
Makefile.PL
lib/DBIx/Class/GlobalDestruction.pm [deleted file]
lib/DBIx/Class/ResultSource.pm
lib/DBIx/Class/Schema.pm
t/53lean_startup.t
t/55namespaces_cleaned.t

index 77abec6..90ac332 100644 (file)
@@ -61,6 +61,7 @@ my $runtime_requires = {
   'Context::Preserve'        => '0.01',
   'Data::Dumper::Concise'    => '2.020',
   'Data::Page'               => '2.00',
+  'Devel::GlobalDestruction' => '0',
   'Hash::Merge'              => '0.12',
   'Moo'                      => '0.009014',
   'MRO::Compat'              => '0.09',
diff --git a/lib/DBIx/Class/GlobalDestruction.pm b/lib/DBIx/Class/GlobalDestruction.pm
deleted file mode 100644 (file)
index 33a9654..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# This is just a concept-test. If works as intended will ship in its own
-# right as Devel::GlobalDestruction::PP or perhaps even as part of rafls
-# D::GD itself
-
-package # hide from pause
-  DBIx::Class::GlobalDestruction;
-
-use strict;
-use warnings;
-
-use base 'Exporter';
-our @EXPORT = 'in_global_destruction';
-
-use DBIx::Class::Exception;
-
-if (defined ${^GLOBAL_PHASE}) {
-  eval 'sub in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }';
-}
-elsif (eval { require Devel::GlobalDestruction }) { # use the XS version if available
-  *in_global_destruction = \&Devel::GlobalDestruction::in_global_destruction;
-}
-else {
-  my ($in_global_destruction, $before_is_installed);
-
-  eval <<'PP_IGD';
-
-sub in_global_destruction () { $in_global_destruction }
-
-END {
-  # SpeedyCGI runs END blocks every cycle but keeps object instances
-  # hence we have to disable the globaldestroy hatch, and rely on the
-  # eval traps (which appears to work, but are risky done so late)
-  $in_global_destruction = 1 unless $CGI::SpeedyCGI::i_am_speedy;
-}
-
-# threads do not execute the global ENDs (it would be stupid). However
-# one can register a new END via simple string eval within a thread, and
-# achieve the same result. A logical place to do this would be CLONE, which
-# is claimed to run in the context of the new thread. However this does
-# not really seem to be the case - any END evaled in a CLONE is ignored :(
-# Hence blatantly hooking threads::create
-if ($INC{'threads.pm'}) {
-  require Class::Method::Modifiers;
-  Class::Method::Modifiers::install_modifier( threads => before => create => sub {
-    my $orig_target_cref = $_[1];
-    $_[1] = sub {
-      { local $@; eval 'END { $in_global_destruction = 1 }' }
-      $orig_target_cref->();
-    };
-  });
-  $before_is_installed = 1;
-}
-
-# just in case threads got loaded after DBIC (silly)
-sub CLONE {
-  DBIx::Class::Exception->throw("You must load the 'threads' module before @{[ __PACKAGE__ ]}")
-    unless $before_is_installed;
-}
-
-PP_IGD
-
-}
-
-1;
index f45ea2f..818341b 100644 (file)
@@ -10,7 +10,7 @@ use DBIx::Class::ResultSourceHandle;
 
 use DBIx::Class::Exception;
 use DBIx::Class::Carp;
-use DBIx::Class::GlobalDestruction;
+use Devel::GlobalDestruction;
 use Try::Tiny;
 use List::Util 'first';
 use Scalar::Util qw/blessed weaken isweak/;
index dbe4cbe..049c626 100644 (file)
@@ -9,7 +9,7 @@ use Try::Tiny;
 use Scalar::Util qw/weaken blessed/;
 use Sub::Name 'subname';
 use B 'svref_2object';
-use DBIx::Class::GlobalDestruction;
+use Devel::GlobalDestruction;
 use namespace::clean;
 
 use base qw/DBIx::Class/;
index 30f1d90..6c00ff6 100644 (file)
@@ -40,6 +40,7 @@ BEGIN {
     B
     locale
 
+    Devel::GlobalDestruction
     namespace::clean
     Try::Tiny
     Context::Preserve
index 2205ded..aa6fca0 100644 (file)
@@ -80,9 +80,6 @@ my $skip_idx = { map { $_ => 1 } (
   # from the parent
   'DBIx::Class::ResultSet::Pager',
 
-  # this is not part of the inheritance tree (plus is a temporary fix anyway)
-  'DBIx::Class::GlobalDestruction',
-
   # Moo does not name its generated methods, fix pending
   'DBIx::Class::Storage::BlockRunner',
 ) };