]> git.vpit.fr Git - perl/modules/Lexical-Types.git/blobdiff - Types.xs
Fix the thread destructor trick for 5.13.1
[perl/modules/Lexical-Types.git] / Types.xs
index 0a13cdb88caf7c94517d61d6188349c1e15a604c..a8fb284c35a89b6f8379f04553f51f7f676a54fa 100644 (file)
--- a/Types.xs
+++ b/Types.xs
@@ -216,21 +216,12 @@ STATIC void lt_ptable_hints_clone(pTHX_ ptable_ent *ent, void *ud_) {
  ptable_hints_store(ud->tbl, ent->key, h2);
 }
 
-STATIC void lt_thread_cleanup(pTHX_ void *);
+#include "reap.h"
 
 STATIC void lt_thread_cleanup(pTHX_ void *ud) {
int *level = ud;
dMY_CXT;
 
- if (*level) {
-  *level = 0;
-  LEAVE;
-  SAVEDESTRUCTOR_X(lt_thread_cleanup, level);
-  ENTER;
- } else {
-  dMY_CXT;
-  PerlMemShared_free(level);
-  ptable_hints_free(MY_CXT.tbl);
- }
+ ptable_hints_free(MY_CXT.tbl);
 }
 
 #endif /* LT_THREADSAFE */
@@ -739,7 +730,6 @@ CLONE(...)
 PROTOTYPE: DISABLE
 PREINIT:
  ptable *t;
- int    *level;
  SV     *cloned_default_meth;
 PPCODE:
  {
@@ -757,13 +747,7 @@ PPCODE:
   MY_CXT.pp_padsv_saved = 0;
   MY_CXT.default_meth   = cloned_default_meth;
  }
- {
-  level = PerlMemShared_malloc(sizeof *level);
-  *level = 1;
-  LEAVEn("sub");
-  SAVEDESTRUCTOR_X(lt_thread_cleanup, level);
-  ENTERn("sub");
- }
+ reap(3, lt_thread_cleanup, NULL);
  XSRETURN(0);
 
 #endif