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;
#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;
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;
}