lispobj *result;
struct thread *th = arch_os_get_current_thread();
- /* SIG_STOP_FOR_GC needs to be enabled before we can call lisp:
- * otherwise two threads racing here may deadlock: the other will
- * wait on the GC lock, and the other cannot stop the first
- * one... */
- check_gc_signals_unblocked_or_lose();
+ /* SIG_STOP_FOR_GC must be unblocked: else two threads racing here
+ * may deadlock: one will wait on the GC lock, and the other
+ * cannot stop the first one... */
+ check_gc_signals_unblocked_or_lose(0);
/* FIXME: OOAO violation: see arch_pseudo_* */
set_pseudo_atomic_atomic(th);
#ifdef LISP_FEATURE_STACK_GROWS_DOWNWARD_NOT_UPWARD
#error "!C_STACK_IS_CONTROL_STACK and STACK_GROWS_DOWNWARD_NOT_UPWARD is not supported"
#endif
- *current_control_stack_pointer = (lispobj) result;
- current_control_stack_pointer += 1;
+ *access_control_stack_pointer(th) = (lispobj) result;
+ access_control_stack_pointer(th) += 1;
#endif
do_pending_interrupt();
#ifndef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
- current_control_stack_pointer -= 1;
- result = (lispobj *) *current_control_stack_pointer;
+ access_control_stack_pointer(th) -= 1;
+ result = (lispobj *) *access_control_stack_pointer(th);
#endif
}
return result;
/* This is not pseudo atomic at all, but is called only from
* interrupt safe places like interrupt handlers. MG -
* 2005-08-09 */
- check_deferrables_blocked_or_lose();
+ check_deferrables_blocked_or_lose(0);
result = dynamic_space_free_pointer;