X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FThread-Cleanup.git;a=blobdiff_plain;f=Cleanup.xs;h=0a19890d9b41753f65e903b66a18957c77c3b566;hp=f41b2c865dc029904c2bf5d7c4f9badb1302f1f9;hb=a518962799a5d83550da2be0f469ff665edbbb81;hpb=a6ef23f3614ebe367d16904ed1fb79d203ce4db7 diff --git a/Cleanup.xs b/Cleanup.xs index f41b2c8..0a19890 100644 --- a/Cleanup.xs +++ b/Cleanup.xs @@ -11,49 +11,23 @@ #define TC_HAS_PERL(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S)))))) -#undef ENTERn -#if defined(ENTER_with_name) && !TC_HAS_PERL(5, 11, 4) -# define ENTERn(N) ENTER_with_name(N) -#else -# define ENTERn(N) ENTER -#endif - -#undef LEAVEn -#if defined(LEAVE_with_name) && !TC_HAS_PERL(5, 11, 4) -# define LEAVEn(N) LEAVE_with_name(N) -#else -# define LEAVEn(N) LEAVE -#endif - -STATIC void tc_callback(pTHX_ void *); +#include "reap.h" 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; + dSP; - PerlMemShared_free(level); + 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 @@ -63,12 +37,7 @@ PROTOTYPES: DISABLE void CLONE(...) PREINIT: - int *level; CODE: { - level = PerlMemShared_malloc(sizeof *level); - *level = 1; - LEAVEn("sub"); - SAVEDESTRUCTOR_X(tc_callback, level); - ENTERn("sub"); + reap(3, tc_callback, NULL); }