X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Plugin.xs;h=07a5d259d0854c66e7ddaee7e842630f53975642;hb=5496a5f466ffb76891996678f464fb48428a28c3;hp=cffc46389e01ad1d6175296136266d36eefd88b1;hpb=879b678a52c18c12349431fee0030a48db6d42ff;p=perl%2Fmodules%2Fre-engine-Plugin.git diff --git a/Plugin.xs b/Plugin.xs index cffc463..07a5d25 100644 --- a/Plugin.xs +++ b/Plugin.xs @@ -13,20 +13,6 @@ #define REP_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) && !REP_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) && !REP_HAS_PERL(5, 11, 4) -# define LEAVEn(N) LEAVE_with_name(N) -#else -# define LEAVEn(N) LEAVE -#endif - #ifndef REP_WORKAROUND_REQUIRE_PROPAGATION # define REP_WORKAROUND_REQUIRE_PROPAGATION !REP_HAS_PERL(5, 10, 1) #endif @@ -150,21 +136,12 @@ STATIC void rep_ptable_clone(pTHX_ ptable_ent *ent, void *ud_) { ptable_store(ud->tbl, ent->key, h2); } -STATIC void rep_thread_cleanup(pTHX_ void *); +#include "reap.h" STATIC void rep_thread_cleanup(pTHX_ void *ud) { - int *level = ud; - - if (*level) { - *level = 0; - LEAVE; - SAVEDESTRUCTOR_X(rep_thread_cleanup, level); - ENTER; - } else { - dMY_CXT; - PerlMemShared_free(level); - ptable_free(MY_CXT.tbl); - } + dMY_CXT; + + ptable_free(MY_CXT.tbl); } #endif /* REP_THREADSAFE */ @@ -327,7 +304,7 @@ Plugin_comp(pTHX_ SV * const pattern, U32 flags) * in between */ if (h->exec) { re->cb_exec = h->exec; - SvREFCNT_inc_simple_void_NN(h->exec); + SvREFCNT_inc_simple_void_NN(h->exec); } re->cb_num_capture_buff_FETCH = NULL; @@ -643,7 +620,7 @@ STATIC U32 rep_booted = 0; /* --- XS ------------------------------------------------------------------ */ -MODULE = re::engine::Plugin PACKAGE = re::engine::Plugin +MODULE = re::engine::Plugin PACKAGE = re::engine::Plugin PROTOTYPES: DISABLE @@ -662,29 +639,23 @@ void CLONE(...) PREINIT: ptable *t; - int *level; -CODE: - { - my_cxt_t ud; - dMY_CXT; - ud.tbl = t = ptable_new(); - ud.owner = MY_CXT.owner; - ptable_walk(MY_CXT.tbl, rep_ptable_clone, &ud); - } +PPCODE: { - MY_CXT_CLONE; - MY_CXT.tbl = t; - MY_CXT.owner = aTHX; + my_cxt_t ud; + dMY_CXT; + ud.tbl = t = ptable_new(); + ud.owner = MY_CXT.owner; + ptable_walk(MY_CXT.tbl, rep_ptable_clone, &ud); } { - level = PerlMemShared_malloc(sizeof *level); - *level = 1; - LEAVEn("sub"); - SAVEDESTRUCTOR_X(rep_thread_cleanup, level); - ENTERn("sub"); + MY_CXT_CLONE; + MY_CXT.tbl = t; + MY_CXT.owner = aTHX; } + reap(3, rep_thread_cleanup, NULL); + XSRETURN(0); -#endif +#endif /* REP_THREADSAFE */ void pattern(re::engine::Plugin self, ...)