SVOP *o = cSVOPx(PL_op);
if (o->op_sv) {
- SvREFCNT_dec(ERRSV);
- ERRSV = o->op_sv;
+ sv_setsv(ERRSV, o->op_sv);
+ SvREFCNT_dec(o->op_sv);
o->op_sv = NULL;
}
#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;
}