X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Ffuncall.c;h=9236a48844aa87a12f805bb736e17aba315561dc;hb=ed1910efb36f71b5ebe33b5ffffd7195e15644de;hp=91f5513c643a31a83d4988a746f2d423a047dfcd;hpb=cf507f95509a855a752b6f1771aa06877b8a3b30;p=sbcl.git diff --git a/src/runtime/funcall.c b/src/runtime/funcall.c index 91f5513..9236a48 100644 --- a/src/runtime/funcall.c +++ b/src/runtime/funcall.c @@ -27,11 +27,13 @@ extern lispobj call_into_lisp(lispobj fun, lispobj *args, int nargs); static inline lispobj safe_call_into_lisp(lispobj fun, lispobj *args, int nargs) { +#ifndef LISP_FEATURE_SB_SAFEPOINT /* 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(0); +#endif return call_into_lisp(fun, args, nargs); } @@ -85,7 +87,9 @@ funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2) lispobj funcall0(lispobj function) { - lispobj *args = current_control_stack_pointer; + lispobj **stack_pointer + = &access_control_stack_pointer(arch_os_get_current_thread()); + lispobj *args = *stack_pointer; return safe_call_into_lisp(function, args, 0); } @@ -93,9 +97,11 @@ funcall0(lispobj function) lispobj funcall1(lispobj function, lispobj arg0) { - lispobj *args = current_control_stack_pointer; + lispobj **stack_pointer + = &access_control_stack_pointer(arch_os_get_current_thread()); + lispobj *args = *stack_pointer; - current_control_stack_pointer += 1; + *stack_pointer += 1; args[0] = arg0; return safe_call_into_lisp(function, args, 1); @@ -104,9 +110,11 @@ funcall1(lispobj function, lispobj arg0) lispobj funcall2(lispobj function, lispobj arg0, lispobj arg1) { - lispobj *args = current_control_stack_pointer; + lispobj **stack_pointer + = &access_control_stack_pointer(arch_os_get_current_thread()); + lispobj *args = *stack_pointer; - current_control_stack_pointer += 2; + *stack_pointer += 2; args[0] = arg0; args[1] = arg1; @@ -116,9 +124,11 @@ funcall2(lispobj function, lispobj arg0, lispobj arg1) lispobj funcall3(lispobj function, lispobj arg0, lispobj arg1, lispobj arg2) { - lispobj *args = current_control_stack_pointer; + lispobj **stack_pointer + = &access_control_stack_pointer(arch_os_get_current_thread()); + lispobj *args = *stack_pointer; - current_control_stack_pointer += 3; + *stack_pointer += 3; args[0] = arg0; args[1] = arg1; args[2] = arg2;