X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Cleanup.xs;h=c4f802b6a3acdac0f6c6afd1974a8abc42b4ae23;hb=cd5c6d26d5fb7f9e5c499ba4e0c250ea377430f4;hp=cc55d59e98eec3206bb0b6b3afbce854c8555372;hpb=f178c1e569b78464ea63bf184389cf1b00804690;p=perl%2Fmodules%2FThread-Cleanup.git diff --git a/Cleanup.xs b/Cleanup.xs index cc55d59..c4f802b 100644 --- a/Cleanup.xs +++ b/Cleanup.xs @@ -9,35 +9,25 @@ #define __PACKAGE__ "Thread::Cleanup" #define __PACKAGE_LEN__ (sizeof(__PACKAGE__)-1) -STATIC void tc_callback(pTHX_ void *); +#define TC_HAS_PERL(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S)))))) -STATIC void tc_callback(pTHX_ void *ud) { - int *level = ud; - SV *id; - - if (*level) { - *level = 0; - LEAVE; - SAVEDESTRUCTOR_X(tc_callback, level); - ENTER; - } else { - dSP; +#include "reap.h" - PerlMemShared_free(level); +STATIC void tc_callback(pTHX_ void *ud) { + dSP; - ENTER; - SAVETMPS; + ENTER; + SAVETMPS; - PUSHMARK(SP); - PUTBACK; + PUSHMARK(SP); + PUTBACK; - call_pv(__PACKAGE__ "::_CLEANUP", G_VOID | G_EVAL); + call_pv(__PACKAGE__ "::_CLEANUP", G_VOID | G_EVAL); - PUTBACK; + PUTBACK; - FREETMPS; - LEAVE; - } + FREETMPS; + LEAVE; } MODULE = Thread::Cleanup PACKAGE = Thread::Cleanup @@ -47,12 +37,6 @@ PROTOTYPES: DISABLE void CLONE(...) PREINIT: - int *level; -CODE: - { - level = PerlMemShared_malloc(sizeof *level); - *level = 1; - LEAVE; - SAVEDESTRUCTOR_X(tc_callback, level); - ENTER; - } +PPCODE: + reap(3, tc_callback, NULL); + XSRETURN(0);