X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp_ctl.c;h=5e45a9c48ffbb630967fc6784ff9454ee5bd057d;hb=54e82ce5cfd72fcdc60806373e0c4d6890b68a3c;hp=3bf4f1d169ccc470c44bbb0b6de19215a2fc35af;hpb=b0d9ce3858aa1d5f16f24f50ca1172e6eb75fcd9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp_ctl.c b/pp_ctl.c index 3bf4f1d..5e45a9c 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -2436,18 +2436,20 @@ S_docatch(pTHX_ OP *o) dTHR; int ret; OP *oldop = PL_op; + volatile PERL_SI *cursi = PL_curstackinfo; + dJMPENV; #ifdef DEBUGGING assert(CATCH_GET == TRUE); #endif PL_op = o; redo_body: - CALLPROTECT(aTHX_ &ret, MEMBER_TO_FPTR(S_docatch_body)); + CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_docatch_body)); switch (ret) { case 0: break; case 3: - if (PL_restartop) { + if (PL_restartop && cursi == PL_curstackinfo) { PL_op = PL_restartop; PL_restartop = 0; goto redo_body;