From: Nick Ing-Simmons Date: Wed, 10 Jan 2001 22:52:55 +0000 (+0000) Subject: Allow control of 2nd arg to segsetjmp() via -DSCOPE_SAVES_SIGNAL_MASK. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b03c0a3af9d8dc230dbf7f55955fdc7ce65f2403;p=p5sagit%2Fp5-mst-13.2.git Allow control of 2nd arg to segsetjmp() via -DSCOPE_SAVES_SIGNAL_MASK. (So Alan and Ilya can try setting via hints.) Verified Linux "works" with it true and fails to re-enable SIGINT if false. Restoring sigmask in Perl_sighandler() if handler dies is not equivalent; doing the save everywhere seems to restart read() correctly, but just doing it once "round" the handler does not. p4raw-id: //depot/perlio@8401 --- diff --git a/scope.h b/scope.h index 3e05962..d45bd94 100644 --- a/scope.h +++ b/scope.h @@ -35,6 +35,10 @@ #define SAVEt_GENERIC_PVREF 34 #define SAVEt_PADSV 35 +#ifndef SCOPE_SAVES_SIGNAL_MASK +#define SCOPE_SAVES_SIGNAL_MASK 1 +#endif + #define SSCHECK(need) if (PL_savestack_ix + need > PL_savestack_max) savestack_grow() #define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i)) #define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i)) @@ -307,7 +311,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p\n", \ ce, PL_top_env)); \ JMPENV_PUSH_INIT_ENV(ce,NULL); \ - EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, 1));\ + EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, SCOPE_SAVES_SIGNAL_MASK));\ (ce).je_noset = 1; \ } \ else \ @@ -356,7 +360,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, &cur_env, PL_top_env)); \ cur_env.je_prev = PL_top_env; \ OP_REG_TO_MEM; \ - cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1); \ + cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \ OP_MEM_TO_REG; \ PL_top_env = &cur_env; \ cur_env.je_mustcatch = FALSE; \