X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=f7917abcad8c9fbde616cc2dd3bcb32f75ffeecd;hb=fd95773479714bce7f8578528e0172c37a4cf2d8;hp=e6c2fdfb937b1e3f691af80edbdd896a31cf8921;hpb=432cd8420b1c4c1d963efd13695497095fde9bd0;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index e6c2fdf..f7917ab 100644 --- a/Magic.xs +++ b/Magic.xs @@ -488,9 +488,8 @@ static opclass vmg_opclass(const OP *o) { /* --- Error messages ------------------------------------------------------ */ -static const char vmg_invalid_wiz[] = "Invalid wizard object"; -static const char vmg_wrongargnum[] = "Wrong number of arguments"; -static const char vmg_argstorefailed[] = "Error while storing arguments"; +static const char vmg_invalid_wiz[] = "Invalid wizard object"; +static const char vmg_wrongargnum[] = "Wrong number of arguments"; /* --- Context-safe global data -------------------------------------------- */ @@ -1246,11 +1245,18 @@ static int vmg_cb_call(pTHX_ SV *cb, unsigned int flags, SV *sv, ...) { svr = POPs; if (SvOK(svr)) ret = (int) SvIV(svr); + if (SvROK(svr)) + SvREFCNT_inc(svr); + else + svr = NULL; PUTBACK; FREETMPS; LEAVE; + if (svr && !SvTEMP(svr)) + sv_2mortal(svr); + if (chain) { vmg_dispell_guard_new(*chain); *chain = NULL; @@ -1839,14 +1845,9 @@ static signed char vmg_destruct_level(pTHX) { #endif /* VMG_THREADSAFE */ -static void vmg_teardown(pTHX_ void *interp) { +static void vmg_teardown(pTHX_ void *param) { dMY_CXT; -#if VMG_MULTIPLICITY - if (aTHX != interp) - return; -#endif - #if VMG_THREADSAFE VMG_LOADED_LOCK; @@ -1937,11 +1938,7 @@ static void vmg_setup(pTHX) { newCONSTSUB(stash, "VMG_OP_INFO_NAME", newSVuv(VMG_OP_INFO_NAME)); newCONSTSUB(stash, "VMG_OP_INFO_OBJECT", newSVuv(VMG_OP_INFO_OBJECT)); -#if VMG_MULTIPLICITY - call_atexit(vmg_teardown, aTHX); -#else call_atexit(vmg_teardown, NULL); -#endif return; }