X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=4c5cd5cb5c37e60648ec0650f8db4d18b7133210;hb=b4686a74cf24411a7ae04fdef9b0f19a7a0234e0;hp=341950240c2934e870148a23b6f4a05304372f71;hpb=9ed6790ce779d2ca91e392ceeb016d555658d8c0;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index 3419502..4c5cd5c 100644 --- a/Magic.xs +++ b/Magic.xs @@ -1386,11 +1386,8 @@ STATIC OP *vmg_pp_propagate_errsv(pTHX) { #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; } @@ -1437,6 +1434,7 @@ STATIC int vmg_svt_free_cleanup(pTHX_ void *ud_) { 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) @@ -1444,6 +1442,7 @@ STATIC int vmg_svt_free_cleanup(pTHX_ void *ud_) { 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,