X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=a3f40c8a3015cc416450c43f623a33168d2cb419;hb=5cac4f283a7a2f4421a7f6f06d9d60cb9dfed630;hp=003f52ef84d7df4c91f6a9d0a3cdcba776708cf5;hpb=700dd2952631bcc41697ee3d10e01ed088f01c45;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index 003f52e..a3f40c8 100644 --- a/Magic.xs +++ b/Magic.xs @@ -490,22 +490,6 @@ STATIC void vmg_ptable_clone(pTHX_ ptable_ent *ent, void *ud_) { ptable_store(ud->wizards, ent->key, w); } -STATIC void vmg_thread_cleanup(pTHX_ void *); - -STATIC void vmg_thread_cleanup(pTHX_ void *ud) { - int *level = ud; - - if (*level) { - --*level; - LEAVE; - SAVEDESTRUCTOR_X(vmg_thread_cleanup, level); - ENTER; - } else { - dMY_CXT; - PerlMemShared_free(level); - ptable_free(MY_CXT.wizards); - } -} #endif /* VMG_THREADSAFE */ /* --- Wizard objects ------------------------------------------------------ */ @@ -1260,6 +1244,17 @@ STATIC I32 vmg_svt_val(pTHX_ IV action, SV *sv) { w->cb_ ## N = NULL; \ } +#if VMG_THREADSAFE + +STATIC void vmg_cleanup(pTHX_ void *ud) { + dMY_CXT; + + ptable_free(MY_CXT.wizards); + MY_CXT.wizards = NULL; +} + +#endif /* VMG_THREADSAFE */ + /* --- XS ------------------------------------------------------------------ */ MODULE = Variable::Magic PACKAGE = Variable::Magic @@ -1278,6 +1273,7 @@ BOOT: MY_CXT.b__op_stashes[0] = NULL; #if VMG_THREADSAFE MUTEX_INIT(&vmg_op_name_init_mutex); + call_atexit(vmg_cleanup, NULL); #endif stash = gv_stashpv(__PACKAGE__, 1); @@ -1334,14 +1330,6 @@ PPCODE: ? gv_stashpv(vmg_opclassnames[c], 1) : NULL; } } - { - int *level; - level = PerlMemShared_malloc(sizeof *level); - *level = 1; - LEAVE; - SAVEDESTRUCTOR_X(vmg_thread_cleanup, level); - ENTER; - } XSRETURN(0); #endif /* VMG_THREADSAFE */