diff options
-rw-r--r-- | mg.c | 15 | ||||
-rw-r--r-- | perl.h | 30 |
2 files changed, 30 insertions, 15 deletions
@@ -1158,21 +1158,6 @@ Perl_despatch_signals(pTHX) PL_sig_pending = 0; for (sig = 1; sig < SIG_SIZE; sig++) { if (PL_psig_pend[sig]) { -#define PERL_BLOCK_SIGNALS -#if defined(HAS_SIGPROCMASK) && defined(PERL_BLOCK_SIGNALS) - /* From sigaction(2) (FreeBSD man page): - * | Signal routines normally execute with the signal that - * | caused their invocation blocked, but other signals may - * | yet occur. - * Emulate this behavior. - */ -# define PERL_BLOCKSIG_ADD(set,sig) \ - sigset_t set; sigemptyset(&(set)); sigaddset(&(set), sig) -# define PERL_BLOCKSIG_BLOCK(set) \ - sigprocmask(SIG_BLOCK, &(set), NULL) -# define PERL_BLOCKSIG_UNBLOCK(set) \ - sigprocmask(SIG_UNBLOCK, &(set), NULL) -#endif /* HAS_SIGPROCMASK && PERL_BLOCK_SIGNALS */ PERL_BLOCKSIG_ADD(set, sig); PL_psig_pend[sig] = 0; PERL_BLOCKSIG_BLOCK(set); @@ -4201,6 +4201,36 @@ extern void moncontrol(int); #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 +/* From sigaction(2) (FreeBSD man page): + * | Signal routines normally execute with the signal that + * | caused their invocation blocked, but other signals may + * | yet occur. + * Emulation of this behavior (from within Perl) is enabled + * by defining PERL_BLOCK_SIGNALS. + */ +#define PERL_BLOCK_SIGNALS + +#if defined(HAS_SIGPROCMASK) && defined(PERL_BLOCK_SIGNALS) +# define PERL_BLOCKSIG_ADD(set,sig) \ + sigset_t set; sigemptyset(&(set)); sigaddset(&(set), sig) +# define PERL_BLOCKSIG_BLOCK(set) \ + sigprocmask(SIG_BLOCK, &(set), NULL) +# define PERL_BLOCKSIG_UNBLOCK(set) \ + sigprocmask(SIG_UNBLOCK, &(set), NULL) +#endif /* HAS_SIGPROCMASK && PERL_BLOCK_SIGNALS */ + +/* How about the old style of sigblock()? */ + +#ifndef PERL_BLOCKSIG_ADD +# define PERL_BLOCKSIG_ADD(set, sig) NOOP +#endif +#ifndef PERL_BLOCKSIG_BLOCK +# define PERL_BLOCKSIG_BLOCK(set) NOOP +#endif +#ifndef PERL_BLOCKSIG_ADD +# define PERL_BLOCKSIG_UNBLOCK(set) NOOP +#endif + /* and finally... */ #define PERL_PATCHLEVEL_H_IMPLICIT #include "patchlevel.h" |