X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Finterrupt.h;h=651668cdb7db56dba200db8a53732ac984aaac04;hb=d4d6c4b16a3655ce99a87d43f411391363531260;hp=87b8b23acfc98c840a5c2ab382b86bb604914474;hpb=426bde0954ef91387b8ab0d4528fad9ec02fa24c;p=sbcl.git diff --git a/src/runtime/interrupt.h b/src/runtime/interrupt.h index 87b8b23..651668c 100644 --- a/src/runtime/interrupt.h +++ b/src/runtime/interrupt.h @@ -25,6 +25,8 @@ /* FIXME: do not rely on NSIG being a multiple of 8 */ #define REAL_SIGSET_SIZE_BYTES ((NSIG/8)) +extern void check_blockables_blocked_or_lose(); + static inline void sigcopyset(sigset_t *new, sigset_t *old) { @@ -45,14 +47,13 @@ union interrupt_handler { void (*c)(int, siginfo_t*, void*); }; -struct interrupt_data { - void (*interrupt_low_level_handlers[NSIG]) (int, siginfo_t*, void*) ; - union interrupt_handler interrupt_handlers[NSIG]; +extern union interrupt_handler interrupt_handlers[NSIG]; +struct interrupt_data { /* signal information for pending signal. pending_signal=0 when there * is no pending signal. */ void (*pending_handler) (int, siginfo_t*, void*) ; - int pending_signal ; + int pending_signal; siginfo_t pending_info; sigset_t pending_mask; }; @@ -91,8 +92,12 @@ extern unsigned long install_handler(int signal, extern union interrupt_handler interrupt_handlers[NSIG]; +/* Set all deferrable signals into *s. */ +extern void sigaddset_deferrable(sigset_t *s); /* Set all blockable signals into *s. */ -void sigaddset_blockable(sigset_t *s); +extern void sigaddset_blockable(sigset_t *s); + +extern void block_blockable_signals(); /* The void* casting here avoids having to mess with the various types * of function argument lists possible for signal handlers: