size_t os_vm_page_size;
-#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_LUTEX)
+#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_LUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX)
#include <sys/syscall.h>
#include <unistd.h>
#include <errno.h>
again:
t = sys_futex(lock_word,FUTEX_WAIT,oldval, 0);
- /* Interrupted FUTEX_WAIT calls may return early.
+ /* Interrupted FUTEX_WAIT calls may return early.
*
* If someone manages to wake the futex while we're spinning
* around it, we will just return with -1 and errno EWOULDBLOCK,
* because the value has changed, so that's ok. */
if (t != 0 && errno == EINTR)
- goto again;
+ goto again;
return t;
}
{
/* Conduct various version checks: do we have enough mmap(), is
* this a sparc running 2.2, can we do threads? */
-#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_LUTEX)
+#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_LUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX)
int *futex=0;
#endif
struct utsname name;
#endif
}
#ifdef LISP_FEATURE_SB_THREAD
-#if !defined(LISP_FEATURE_SB_LUTEX)
+#if !defined(LISP_FEATURE_SB_LUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX)
futex_wait(futex,-1);
if(errno==ENOSYS) {
lose("This version of SBCL is compiled with threading support, but your kernel\n"
#endif
if (!handle_guard_page_triggered(context, addr))
#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
- arrange_return_to_lisp_function(context, SymbolFunction(MEMORY_FAULT_ERROR));
+ lisp_memory_fault_error(context, addr);
#else
interrupt_handle_now(signal, info, context);
#endif