sigaddset(s, SIGPIPE);
sigaddset(s, SIGALRM);
sigaddset(s, SIGURG);
- sigaddset(s, SIGFPE);
sigaddset(s, SIGTSTP);
sigaddset(s, SIGCHLD);
sigaddset(s, SIGIO);
#endif
union interrupt_handler handler;
check_blockables_blocked_or_lose();
- check_interrupts_enabled_or_lose(context);
+ if (sigismember(&deferrable_sigset,signal))
+ check_interrupts_enabled_or_lose(context);
#ifdef LISP_FEATURE_LINUX
/* Under Linux on some architectures, we appear to have to restore
#ifdef LISP_FEATURE_LINUX
os_restore_fp_control(context);
#endif
- if(maybe_defer_handler(interrupt_handle_now,data,
- signal,info,context))
+ if(maybe_defer_handler(interrupt_handle_now,data,signal,info,context))
return;
interrupt_handle_now(signal, info, context);
#ifdef LISP_FEATURE_DARWIN
{
os_context_t *context = (os_context_t*)void_context;
struct thread *thread=arch_os_get_current_thread();
- struct interrupt_data *data=
- thread ? thread->interrupt_data : global_interrupt_data;
+ struct interrupt_data *data=thread->interrupt_data;
#ifdef LISP_FEATURE_LINUX
os_restore_fp_control(context);
{
os_context_t *context = arch_os_get_context(&void_context);
struct thread *thread=arch_os_get_current_thread();
- struct interrupt_data *data=
- thread ? thread->interrupt_data : global_interrupt_data;
+ struct interrupt_data *data=thread->interrupt_data;
#ifdef LISP_FEATURE_LINUX
os_restore_fp_control(context);
#endif
{
os_context_t *context=(os_context_t *) void_context;
struct thread *th=arch_os_get_current_thread();
- struct interrupt_data *data=
- th ? th->interrupt_data : global_interrupt_data;
+ struct interrupt_data *data=th->interrupt_data;
if(!foreign_function_call_active && gc_trigger_hit(signal, info, context)){
struct thread *thread=arch_os_get_current_thread();
{
struct sigaction sa;
struct thread *th=arch_os_get_current_thread();
+ /* It may be before the initial thread is started. */
struct interrupt_data *data=
th ? th->interrupt_data : global_interrupt_data;
sigset_t old, new;
union interrupt_handler oldhandler;
struct thread *th=arch_os_get_current_thread();
+ /* It may be before the initial thread is started. */
struct interrupt_data *data=
th ? th->interrupt_data : global_interrupt_data;