X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Finterrupt.c;h=24538f93308d706dd22beb5ec7305b3c6a00006d;hb=6fb6e66f531dfb6140ec3e0cc8f84f6ecd1927ca;hp=cb5fcafd684334be53818e93ac1a9a5c73e6edee;hpb=35e306eeebc40ce947247e3df47a63f47d01734d;p=sbcl.git diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index cb5fcaf..24538f9 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -14,6 +14,7 @@ */ #include +#include #include #ifdef mach /* KLUDGE: #ifdef on lowercase symbols? Ick. -- WHN 19990904 */ @@ -139,8 +140,8 @@ fake_foreign_function_call(os_context_t *context) == current_control_frame_pointer) { /* There is a small window during call where the callee's * frame isn't built yet. */ - if (LowtagOf(*os_context_register_addr(context, reg_CODE)) - == type_FunctionPointer) { + if (lowtagof(*os_context_register_addr(context, reg_CODE)) + == FUN_POINTER_LOWTAG) { /* We have called, but not built the new frame, so * build it for them. */ current_control_frame_pointer[0] = @@ -213,6 +214,7 @@ undo_fake_foreign_function_call(os_context_t *context) * FREE_INTERRUPT_CONTEXT_INDEX? If so, we should say so. And * perhaps yes, unbind_to_here() really would be clearer and less * fragile.. */ + /* dan (2001.08.10) thinks the above supposition is probably correct */ unbind(); #ifdef reg_ALLOC @@ -389,7 +391,7 @@ interrupt_handle_now(int signal, siginfo_t *info, void *void_context) * support decides to pass on it. */ lose("no handler for signal %d in interrupt_handle_now(..)", signal); - } else if (LowtagOf(handler.lisp) == type_FunctionPointer) { + } else if (lowtagof(handler.lisp) == FUN_POINTER_LOWTAG) { /* Allocate the SAPs while the interrupts are still disabled. * (FIXME: Why? This is the way it was done in CMU CL, and it @@ -624,18 +626,19 @@ undoably_install_low_level_interrupt_handler (int signal, sigaddset_blockable(&sa.sa_mask); sa.sa_flags = SA_SIGINFO | SA_RESTART; - /* In the case of interrupt handlers which are modified - * more than once, we only save the original unmodified - * copy. */ + /* In the case of interrupt handlers which are modified more than + * once, we only save the original unmodified copy. */ if (!old_low_level_signal_handler_state->was_modified) { + struct sigaction *old_handler = + (struct sigaction*) &old_low_level_signal_handler_state->handler; old_low_level_signal_handler_state->was_modified = 1; - sigaction(signal, &sa, &old_low_level_signal_handler_state->handler); + sigaction(signal, &sa, old_handler); } else { sigaction(signal, &sa, NULL); } interrupt_low_level_handlers[signal] = - (ARE_SAME_HANDLER(handler,SIG_DFL) ? 0 : handler); + (ARE_SAME_HANDLER(handler, SIG_DFL) ? 0 : handler); } /* This is called from Lisp. */