]> git.vpit.fr Git - perl/modules/Thread-Cleanup.git/commitdiff
When a pseudo-fork ends, execute the cleanup hooks after global END blocks
authorVincent Pit <vince@profvince.com>
Mon, 29 Sep 2014 14:20:43 +0000 (16:20 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 29 Sep 2014 14:20:43 +0000 (16:20 +0200)
Cleanup.xs
lib/Thread/Cleanup.pm
t/30-pseudoforks.t

index 43ab9496eff85fb33ed27dbdb396190d844385c9..4fd00ecb41ee67c1ddb1da76baa34f595698b6a6 100644 (file)
@@ -65,9 +65,8 @@ PPCODE:
   CV *cv = GvCV(gv);
   if (!PL_endav)
    PL_endav = newAV();
-  av_unshift(PL_endav, 1);
   SvREFCNT_inc(cv);
-  if (!av_store(PL_endav, 0, (SV *) cv))
+  if (!av_store(PL_endav, av_len(PL_endav) + 1, (SV *) cv))
    SvREFCNT_dec(cv);
   sv_magicext((SV *) PL_endav, NULL, PERL_MAGIC_ext, &tc_endav_vtbl, NULL, 0);
  }
index 3c2a5e8883144dc66d3e5d65f0e5d48458b2cb0e..fc0435c1321e6a5ceff62c28dd10453fb0d1a79b 100644 (file)
@@ -64,7 +64,7 @@ For detached threads, it will be called if and only if the thread terminates bef
 
 =item *
 
-For pseudo-forks, it will be called when C<waitpid> succeeds, after any C<END> block local to the spawn process but before any global C<END> block ;
+For pseudo-forks, it will be called when C<waitpid> succeeds, after any local or global C<END> block ;
 
 =item *
 
index 2247c4091311ae1cefc73f68b1bb1665e869e26b..fc9e417bdc607c4782d66a5242456bde94c64bcd 100644 (file)
@@ -38,7 +38,7 @@ if ($pid) {
  Thread::Cleanup::register {
   pass               'pseudo-fork destructor called';
   is $local_end,  1, 'pseudo-fork destructor called after local END block';
-  is $global_end, 0, 'pseudo-fork destructor called before global END block';
+  is $global_end, 1, 'pseudo-fork destructor called after global END block';
   is $gd,         0, 'pseudo-fork destructor called before global destruction';
  };