STATIC void su_call(pTHX_ void *ud_) {
su_ud_reap *ud = (su_ud_reap *) ud_;
#if SU_HAS_PERL(5, 10, 0)
+ PERL_CONTEXT saved_cx;
I32 dieing = PL_op->op_type == OP_DIE;
+ I32 cxix;
#endif
dSP;
#if SU_HAS_PERL(5, 10, 0)
if (dieing) {
if (cxstack_ix < cxstack_max)
- ++cxstack_ix;
+ cxix = cxstack_ix + 1;
else
- cxstack_ix = Perl_cxinc(aTHX);
+ cxix = Perl_cxinc(aTHX);
+ saved_cx = cxstack[cxix];
}
#endif
call_sv(ud->cb, G_VOID);
#if SU_HAS_PERL(5, 10, 0)
- if (dieing && cxstack_ix > 0)
- --cxstack_ix;
+ if (dieing)
+ cxstack[cxix] = saved_cx;
#endif
PUTBACK;