X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fruntime%2Flinux-os.c;h=bc87f2a22142f9d27f8f719c3bc1ef54d42da0c4;hb=dd54f9e004a0a83d1328e94648f48dcc27e0be5b;hp=e262f417352718748309ab388ddd4a205d2ac379;hpb=b43c51beeb0569a38900e1e5a78606711f987742;p=sbcl.git diff --git a/src/runtime/linux-os.c b/src/runtime/linux-os.c index e262f41..bc87f2a 100644 --- a/src/runtime/linux-os.c +++ b/src/runtime/linux-os.c @@ -64,7 +64,7 @@ int personality (unsigned long); size_t os_vm_page_size; -#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_LUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) +#if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_FUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) #include #include #include @@ -221,7 +221,7 @@ os_init(char *argv[], char *envp[]) #endif } #ifdef LISP_FEATURE_SB_THREAD -#if !defined(LISP_FEATURE_SB_LUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) +#if defined(LISP_FEATURE_SB_FUTEX) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) futex_init(); #endif if(! isnptl()) { @@ -435,6 +435,10 @@ sigsegv_handler(int signal, siginfo_t *info, os_context_t *context) } #endif +#ifdef LISP_FEATURE_SB_SAFEPOINT + if (!handle_safepoint_violation(context, addr)) +#endif + #ifdef LISP_FEATURE_GENCGC if (!gencgc_handle_wp_violation(addr)) #else @@ -449,9 +453,18 @@ os_install_interrupt_handlers(void) { undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT, sigsegv_handler); + + /* OAOOM c.f. sunos-os.c. + * Should we have a reusable function gc_install_interrupt_handlers? */ #ifdef LISP_FEATURE_SB_THREAD +# ifdef LISP_FEATURE_SB_SAFEPOINT +# ifdef LISP_FEATURE_SB_THRUPTION + undoably_install_low_level_interrupt_handler(SIGPIPE, thruption_handler); +# endif +# else undoably_install_low_level_interrupt_handler(SIG_STOP_FOR_GC, sig_stop_for_gc_handler); +# endif #endif }