X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Finterrupt.c;h=5155c6a4fde116feab6efa5dbc489b6c82f48fbc;hb=65a01dae3d437a48e8dd0d051a446245f9e29929;hp=c63083122f0460b913f0c784c7de8f0a5543d85a;hpb=e365f2f7a9c66d307b48fee70778f4eaa84bdcc0;p=sbcl.git diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index c630831..5155c6a 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -288,7 +288,7 @@ interrupt_handle_pending(os_context_t *context) { fake_foreign_function_call(context); } - funcall0(SymbolFunction(MAYBE_GC)); + funcall0(SymbolFunction(SUB_GC)); #ifndef __i386__ if (were_in_lisp) #endif @@ -571,6 +571,9 @@ boolean interrupt_maybe_gc(int signal, siginfo_t *info, void *void_context) { 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; if (!foreign_function_call_active #ifndef LISP_FEATURE_GENCGC @@ -589,11 +592,11 @@ interrupt_maybe_gc(int signal, siginfo_t *info, void *void_context) * will detect pending_signal==0 and know to do a GC with the * signal context instead of calling a Lisp-level handler */ maybe_gc_pending = 1; - if (pending_signal == 0) { + if (data->pending_signal == 0) { /* FIXME: This copy-pending_mask-then-sigaddset_blockable * idiom occurs over and over. It should be factored out * into a function with a descriptive name. */ - memcpy(&pending_mask, + memcpy(&(data->pending_mask), os_context_sigmask_addr(context), sizeof(sigset_t)); sigaddset_blockable(os_context_sigmask_addr(context)); @@ -603,7 +606,7 @@ interrupt_maybe_gc(int signal, siginfo_t *info, void *void_context) else { lispobj *old_free_space=current_dynamic_space; fake_foreign_function_call(context); - funcall0(SymbolFunction(MAYBE_GC)); + funcall0(SymbolFunction(SUB_GC)); undo_fake_foreign_function_call(context); if(current_dynamic_space==old_free_space) /* MAYBE-GC (as the name suggest) might not. If it