/* Allocate the SAP object while the interrupts are still
* disabled. */
+ unblock_gc_signals();
context_sap = alloc_sap(context);
#ifndef LISP_FEATURE_WIN32
* Yeah, but non-gencgc platforms don't really wrap allocation
* in PA. MG - 2005-08-29 */
- lispobj info_sap,context_sap = alloc_sap(context);
- info_sap = alloc_sap(info);
+ lispobj info_sap, context_sap;
/* Leave deferrable signals blocked, the handler itself will
* allow signals again when it sees fit. */
-#ifdef LISP_FEATURE_SB_THREAD
- {
- sigset_t unblock;
- sigemptyset(&unblock);
- sigaddset(&unblock, SIG_STOP_FOR_GC);
-#ifdef SIG_RESUME_FROM_GC
- sigaddset(&unblock, SIG_RESUME_FROM_GC);
-#endif
- thread_sigmask(SIG_UNBLOCK, &unblock, 0);
- }
-#endif
+ unblock_gc_signals();
+ context_sap = alloc_sap(context);
+ info_sap = alloc_sap(info);
FSHOW_SIGNAL((stderr,"/calling Lisp-level handler\n"));
void
arrange_return_to_lisp_function(os_context_t *context, lispobj function)
{
+ check_gc_signals_unblocked_in_sigset_or_lose
+ (os_context_sigmask_addr(context));
#if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64))
void * fun=native_pointer(function);
void *code = &(((struct simple_fun *) fun)->code);
{
lispobj context_sap;
fake_foreign_function_call(context);
+ unblock_gc_signals();
context_sap = alloc_sap(context);
#ifndef LISP_FEATURE_WIN32
thread_sigmask(SIG_SETMASK, os_context_sigmask_addr(context), 0);