#endif /* VMG_PROPAGATE_ERRSV_NEEDS_TRAMPOLINE */
STATIC int vmg_propagate_errsv_free(pTHX_ SV *sv, MAGIC *mg) {
- if (mg->mg_obj) {
- ERRSV = mg->mg_obj;
- mg->mg_obj = NULL;
- mg->mg_flags &= ~MGf_REFCOUNTED;
- }
+ if (mg->mg_obj)
+ sv_setsv(ERRSV, mg->mg_obj);
return 0;
}
SV *guard = sv_newmortal();
sv_magicext(guard, errsv, PERL_MAGIC_ext, &vmg_propagate_errsv_vtbl,
NULL, 0);
+ SvREFCNT_dec(errsv);
}
#else /* !VMG_PROPAGATE_ERRSV_NEEDS_TRAMPOLINE */
# if !VMG_HAS_PERL(5, 8, 9)
SV *guard = sv_newmortal();
sv_magicext(guard, errsv, PERL_MAGIC_ext, &vmg_propagate_errsv_vtbl,
NULL, 0);
+ SvREFCNT_dec(errsv);
}
# else
sv_magicext(ERRSV, errsv, PERL_MAGIC_ext, &vmg_propagate_errsv_vtbl,