head 1.3; access; symbols pkgsrc-2015Q1:1.2.0.16 pkgsrc-2015Q1-base:1.2 pkgsrc-2014Q4:1.2.0.14 pkgsrc-2014Q4-base:1.2 pkgsrc-2014Q3:1.2.0.12 pkgsrc-2014Q3-base:1.2 pkgsrc-2014Q2:1.2.0.10 pkgsrc-2014Q2-base:1.2 pkgsrc-2014Q1:1.2.0.8 pkgsrc-2014Q1-base:1.2 pkgsrc-2013Q4:1.2.0.6 pkgsrc-2013Q4-base:1.2 pkgsrc-2013Q3:1.2.0.4 pkgsrc-2013Q3-base:1.2 pkgsrc-2013Q2:1.2.0.2 pkgsrc-2013Q2-base:1.2; locks; strict; comment @# @; 1.3 date 2015.06.11.04.37.00; author asau; state dead; branches; next 1.2; commitid 3vryCVdUx9GR2Yoy; 1.2 date 2013.06.15.21.17.23; author asau; state Exp; branches; next 1.1; commitid 7URvP4fmqHaUUKTw; 1.1 date 2013.06.11.19.26.28; author asau; state Exp; branches; next ; commitid THVz5UkGh3cPqeTw; desc @@ 1.3 log @Remove stub patch, not needed anymore. Tested on NetBSD 7 i386/amd64. @ text @$NetBSD: patch-revert-37d3828773e2f847bb1ed7522b0af4fb8e736fc8,v 1.2 2013/06/15 21:17:23 asau Exp $ Suppress test introduced by revision 37d3828773e2f847bb1ed7522b0af4fb8e736fc8 which breaks build on NetBSD. diff --git a/contrib/sb-sprof/Makefile contrib/sb-sprof/Makefile index 7373c72..463ae52 100644 --- contrib/sb-sprof/Makefile +++ contrib/sb-sprof/Makefile @@@@ -2,4 +2,4 @@@@ MODULE=sb-sprof include ../vanilla-module.mk test:: - $(SBCL) --eval '(load (format nil "SYS:CONTRIB;~:@@(~A~);TEST.LISP" "$(MODULE)"))' . (lp#1153148) * bug fix: Better error messages for package operations (lp#1154776) * bug fix: delete-package on a nonexistent package should signal a cerror. (regression since 1.0.37.44). * bug fix: accessing &MORE (stack allocated &REST) arguments checks bounds. (lp#1154946, lp#1072112) * bug fix: compiling make-array no longer signals an error when the element-type is an uknown type, a warning is issued instead. Thanks to James Kalenius (lp#1156095) * bug fix: SEARCH on generic (non-VECTOR non-LIST) sequence types no longer produces wrong results for some inputs. (Thanks to Jan Moringen.) (lp#1153312) changes in sbcl-1.1.5 relative to sbcl-1.1.4: * minor incompatible change: SB-SPROF:WITH-PROFILING no longer loops by default. * new feature: package local nicknames. See manual for details. * new feature: SB-EXT:MAP-DIRECTORY provides a powerful interface for directory traversal: it is the backend used by SBCL for CL:DIRECTORY. * enhancement: easier to use restarts for resolving name-conflicts resulting from IMPORT, EXPORT, or USE-PACKAGE. * enhancement: variant DEFPACKAGE forms now signal a full error with restarts provided for resolving the situation. (lp#891351) * enhancement: by setting SB-EXT:*ON-PACKAGE-VARIANCE* appropriately variant DEFPACKAGE forms can now signal a full error with restarts provided for resolving the situation. See manual for details. (lp#891351) * enhancement: make-random-state now uses CryptGenRandom as a seed on Windows. (Thanks to Anton Kovalenko.) (lp#1102748) * enhancement: backtrace improvements ** secondary CLOS dispatch functions have better debug names (lp#503081) ** easier to read method names in backtraces. See SB-DEBUG:*METHOD-FRAME-STYLE*. ** SB-DEBUG:PRINT-BACKTRACE and SB-DEBUG:LIST-BACKTRACE are available as forwards-compatible replacements for SB-DEBUG:BACKTRACE and SB-DEBUG:BACKTRACE-AS-LIST. ** SB-DEBUG:*SHOW-ENTRY-POINT-DETAILS** has been deprecated, as the same information is available in less intrusive form as frame annotations. * enhancement: SB-POSIX now provides MAP-ANON. * enhancement: test-suite results are colorized, failures in red, unexpected success in green. Works on Windows and on terminals with ANSI escape code support. Can be disabled with --no-color. * optimization: SB-CONCURRENCY:QUEUE implementation is more efficient. (thanks to James M. Lawrence) * bug fix: no more unused variable style warnings from RESTART-CASE macroexpansion (lp#1113859) * bug fix: no more unused variable style warnings when loading sb-bsd-sockets.asd (lp#1114681) * bug fix: deleting a package removes it from implementation-package lists of other packages. * bug fix: SB-SPROF:WITH-PROFILING is now usable in the Slime REPL on Darwin. This does not fix the occasional "interrupt already pending" issue, though. * bug fix: (setf (documentation 'x 'function)) and (setf (documentation #'x t)) set documentation in different places. (regression since 1.0.43.63) * bug fix: build on newer glibc. (lp#1095036) changes in sbcl-1.1.4 relative to sbcl-1.1.3: * optimization: LOOP expressions using "of-type character" have slightly more efficient expansions. * bug fix: very long (or infinite) constant lists in DOLIST do not result in very long compile times or heap exhaustion anymore. (lp#1095488) * bug fix: `#3(1) is read as #(1 1 1), not as #(1). (lp#1095918) * bug fix: adjust-array ignored :initial-element for simple-vectors. (lp#1096359) * bug fix: optimizations to MAKE-INSTANCE with literal list initargs no longer cause infinite loops (on circular data) or violate eqlity constraints. (lp#1099708) * bug fix: FIRST was not being open coded. (regression from 1.1.0) changes in sbcl-1.1.3 relative to sbcl-1.1.2: * enhancement: warnings about bad locale settings, LANG, LC_CTYPE, etc. (lp#727625) * enhancement: support for C-c to interrupt the foreground thread on Windows. (Thanks to Anton Kovalenko.) * enhancement: STDCALL alien callbacks. (Thanks to Anton Kovalenko.) * enhancement: Safepoint builds on POSIX platforms can now optionally be built without pseudo-atomic sequences and their run-time overhead. * enhancement: Threads created outside of Lisp can enter Lisp through alien callbacks and appear as Lisp threads for the duration of that function invocation. On safepoint builds only. * enhancement: Miscellaneous improvements to namestrings and underlying calls to OS functions for file system access on Windows. (Thanks to Anton Kovalenko.) * enhancement: The MSI installer support for Windows now uses Windows Installer XML at least version 3.5 and includes various usability improvements. (Thanks to Dmitry Kalyanov and Anton Kovalenko.) * enhancement: The sb-bsd-sockets contrib now supports non-blocking-mode on Windows. (Thanks to Anton Kovalenko.) * enhancement: The Windows backend now supports the x86-64 platform. (Thanks to Anton Kovalenko.) * bug fix: fasls are now once again directly executable (on platforms supporting shebang lines, with a suitably-installed sbcl). * bug fix: make.sh --help no longer runs clean.sh. (lp#937001) * bug fix: Fix CAS access to slots of direct instances of structure classes in the presence of subclasses sharing the same conc-name. * bug fix: Logical pathname namestrings on Windows have been changed to be lower-case, to minimize differences between POSIX and Windows. @ text @d1 1 a1 1 $NetBSD$ d3 1 a3 1 Revert revision 37d3828773e2f847bb1ed7522b0af4fb8e736fc8 a15 545 diff --git contrib/sb-sprof/sb-sprof.lisp contrib/sb-sprof/sb-sprof.lisp index 0d81649..775924a 100644 --- contrib/sb-sprof/sb-sprof.lisp +++ contrib/sb-sprof/sb-sprof.lisp @@@@ -792,9 +792,7 @@@@ The following keyword args are recognized: :mode mode)) (enable-call-counting) (setf *profiled-threads* threads) - (sb-sys:enable-interrupt sb-unix:sigprof - #'sigprof-handler - :synchronous t) + (sb-sys:enable-interrupt sb-unix:sigprof #'sigprof-handler) (ecase mode (:alloc (let ((alloc-signal (1- alloc-interval))) @@@@ -1407,23 +1405,6 @@@@ functions during statistical profiling." (with-profiling (:reset t :max-samples 1000 :report :graph) (test-0 7))) -(defun consalot () - (let ((junk '())) - (loop repeat 10000 do - (push (make-array 10) junk)) - junk)) - -(defun consing-test () - ;; 0.0001 chosen so that it breaks rather reliably when sprof does not - ;; respect pseudo atomic. - (with-profiling (:reset t :sample-interval 0.0001 :report :graph :loop nil) - (let ((target (+ (get-universal-time) 15))) - (princ #\.) - (force-output) - (loop - while (< (get-universal-time) target) - do (consalot))))) - ;;; provision (provide 'sb-sprof) diff --git make-config.sh make-config.sh index 6b720e0..1a0a547 100644 --- make-config.sh +++ make-config.sh @@@@ -544,7 +544,6 @@@@ case "$sbcl_os" in # roughly-equivalent magic nevertheless:) printf ' :sb-dynamic-core :os-provides-dlopen' >> $ltf printf ' :sb-thread :sb-safepoint :sb-thruption :sb-wtimer' >> $ltf - printf ' :sb-safepoint-strictly' >> $ltf # link_or_copy Config.$sbcl_arch-win32 Config link_or_copy $sbcl_arch-win32-os.h target-arch-os.h diff --git package-data-list.lisp-expr package-data-list.lisp-expr index 691a040..03ab6ee 100644 --- package-data-list.lisp-expr +++ package-data-list.lisp-expr @@@@ -2023,8 +2023,6 @@@@ is a good idea, but see SB-SYS re. blurring of boundaries." "THREAD-NAME" "THREAD-YIELD" "FOREIGN-THREAD" - #!+(and sb-safepoint-strictly (not win32)) - "SIGNAL-HANDLING-THREAD" ;; Memory barrier "BARRIER" ;; Mutexes diff --git src/code/target-signal.lisp src/code/target-signal.lisp index 3fd22f3..9fab9d1 100644 --- src/code/target-signal.lisp +++ src/code/target-signal.lisp @@@@ -117,25 +117,11 @@@@ (sb!alien:define-alien-routine ("install_handler" install-handler) sb!alien:unsigned-long (signal sb!alien:int) - (handler sb!alien:unsigned-long) - (synchronous boolean)) + (handler sb!alien:unsigned-long)) ;;;; interface to enabling and disabling signal handlers -;;; Note on the SYNCHRONOUS argument: On builds without pseudo-atomic, -;;; we have no way of knowing whether interrupted code was in an -;;; allocation sequence, and cannot delay signals until after -;;; allocation. Any signal that can occur asynchronously must be -;;; considered unsafe for immediate execution, and the invocation of its -;;; lisp handler will get delayed into a newly spawned signal handler -;;; thread. However, there are signals which we must handle -;;; immediately, because they occur synchonously (hence the boolean flag -;;; SYNCHRONOUS to this function), luckily implying that the signal -;;; happens only in specific places (illegal instructions, floating -;;; point instructions, certain system calls), hopefully ruling out the -;;; possibility that we would trigger it during allocation. - -(defun enable-interrupt (signal handler &key synchronous) +(defun enable-interrupt (signal handler) (declare (type (or function fixnum (member :default :ignore)) handler)) (/show0 "enable-interrupt") (flet ((run-handler (&rest args) @@@@ -149,8 +135,7 @@@@ (:ignore sig-ign) (t (sb!kernel:get-lisp-obj-address - #'run-handler))) - synchronous))) + #'run-handler)))))) (cond ((= result sig-dfl) :default) ((= result sig-ign) :ignore) (t (the (or function fixnum) @@@@ -162,26 +147,6 @@@@ (defun ignore-interrupt (signal) (enable-interrupt signal :ignore)) -;;;; Support for signal handlers which aren't. -;;;; -;;;; On safepoint builds, user-defined Lisp signal handlers do not run -;;;; in the handler for their signal, because we have no pseudo atomic -;;;; mechanism to prevent handlers from hitting during allocation. -;;;; Rather, the signal spawns off a fresh native thread, which calls -;;;; into lisp with a fake context through this callback: - -#!+(and sb-safepoint-strictly (not win32)) -(defun signal-handler-callback (run-handler signal args) - (sb!thread::initial-thread-function-trampoline - (sb!thread::make-signal-handling-thread :name "signal handler" - :signal-number signal) - nil (lambda () - (let* ((info (sb!sys:sap-ref-sap args 0)) - (context (sb!sys:sap-ref-sap args sb!vm:n-word-bytes))) - (funcall run-handler signal info context))) - nil nil nil nil)) - - ;;;; default LISP signal handlers ;;;; ;;;; Most of these just call ERROR to report the presence of the signal. @@@@ -272,13 +237,13 @@@@ "Enable all the default signals that Lisp knows how to deal with." (enable-interrupt sigint #'sigint-handler) (enable-interrupt sigterm #'sigterm-handler) - (enable-interrupt sigill #'sigill-handler :synchronous t) + (enable-interrupt sigill #'sigill-handler) #!-linux (enable-interrupt sigemt #'sigemt-handler) - (enable-interrupt sigfpe #'sb!vm:sigfpe-handler :synchronous t) - (enable-interrupt sigbus #'sigbus-handler :synchronous t) + (enable-interrupt sigfpe #'sb!vm:sigfpe-handler) + (enable-interrupt sigbus #'sigbus-handler) #!-linux - (enable-interrupt sigsys #'sigsys-handler :synchronous t) + (enable-interrupt sigsys #'sigsys-handler) #!-sb-wtimer (enable-interrupt sigalrm #'sigalrm-handler) #!-sb-thruption diff --git src/code/thread.lisp src/code/thread.lisp index 3d1ecd4..2cfd567 100644 --- src/code/thread.lisp +++ src/code/thread.lisp @@@@ -42,14 +42,6 @@@@ in future versions." "Type of native threads which are attached to the runtime as Lisp threads temporarily.") -#!+(and sb-safepoint-strictly (not win32)) -(def!struct (signal-handling-thread - (:include foreign-thread) - (:conc-name "THREAD-")) - #!+sb-doc - "Asynchronous signal handling thread." - (signal-number nil :type integer)) - (def!struct mutex #!+sb-doc "Mutex type." diff --git src/compiler/generic/objdef.lisp src/compiler/generic/objdef.lisp index 262f472..fda2758 100644 --- src/compiler/generic/objdef.lisp +++ src/compiler/generic/objdef.lisp @@@@ -434,8 +434,6 @@@@ #!+sb-safepoint (csp-around-foreign-call :c-type "lispobj *") #!+sb-safepoint (pc-around-foreign-call :c-type "lispobj *") #!+win32 (synchronous-io-handle-and-flag :c-type "HANDLE" :length 1) - #!+(and sb-safepoint-strictly (not win32)) - (sprof-alloc-region :c-type "struct alloc_region" :length 5) ;; KLUDGE: On alpha, until STEPPING we have been lucky and the 32 ;; bit slots came in pairs. However the C compiler will align ;; interrupt_contexts on a double word boundary. This logic should diff --git src/compiler/generic/parms.lisp src/compiler/generic/parms.lisp index 4661321..ca556c2 100644 --- src/compiler/generic/parms.lisp +++ src/compiler/generic/parms.lisp @@@@ -124,9 +124,7 @@@@ fdefinition-object #!+win32 sb!kernel::handle-win32-exception #!+sb-thruption sb!thread::run-interruption - #!+sb-safepoint sb!thread::enter-foreign-callback - #!+(and sb-safepoint-strictly (not win32)) - sb!unix::signal-handler-callback)) + #!+sb-safepoint sb!thread::enter-foreign-callback)) (defparameter *common-static-symbols* '(t diff --git src/compiler/ppc/macros.lisp src/compiler/ppc/macros.lisp index 262cc10..2fdfb7e 100644 --- src/compiler/ppc/macros.lisp +++ src/compiler/ppc/macros.lisp @@@@ -336,9 +336,6 @@@@ ;;; trap if ALLOC-TN's negative (handling the deferred interrupt) and ;;; using FLAG-TN - minus the large constant - to correct ALLOC-TN. (defmacro pseudo-atomic ((flag-tn) &body forms) - #!+sb-safepoint-strictly - `(progn ,flag-tn ,@@forms (emit-safepoint)) - #!-sb-safepoint-strictly `(progn (without-scheduling () ;; Extra debugging stuff: diff --git src/compiler/x86-64/macros.lisp src/compiler/x86-64/macros.lisp index a397573..11a06fc 100644 --- src/compiler/x86-64/macros.lisp +++ src/compiler/x86-64/macros.lisp @@@@ -303,9 +303,9 @@@@ #!+sb-thread (defmacro pseudo-atomic (&rest forms) - #!+sb-safepoint-strictly + #!+win32 `(progn ,@@forms (emit-safepoint)) - #!-sb-safepoint-strictly + #!-win32 (with-unique-names (label) `(let ((,label (gen-label))) (inst mov (make-ea :qword diff --git src/compiler/x86/macros.lisp src/compiler/x86/macros.lisp index 4050640..d7b6bc2 100644 --- src/compiler/x86/macros.lisp +++ src/compiler/x86/macros.lisp @@@@ -408,9 +408,9 @@@@ #!+sb-thread (defmacro pseudo-atomic (&rest forms) - #!+sb-safepoint-strictly + #!+win32 `(progn ,@@forms (emit-safepoint)) - #!-sb-safepoint-strictly + #!-win32 (with-unique-names (label) `(let ((,label (gen-label))) (inst mov (make-ea :dword :disp (* 4 thread-pseudo-atomic-bits-slot)) diff --git src/runtime/gencgc.c src/runtime/gencgc.c index f4ffd2f..5829b5a 100644 --- src/runtime/gencgc.c +++ src/runtime/gencgc.c @@@@ -4306,7 +4306,9 @@@@ general_alloc(sword_t nbytes, int page_type_flag) lispobj AMD64_SYSV_ABI * alloc(long nbytes) { -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY +#ifdef LISP_FEATURE_WIN32 + /* WIN32 is currently the only platform where inline allocation is + * not pseudo atomic. */ struct thread *self = arch_os_get_current_thread(); int was_pseudo_atomic = get_pseudo_atomic_atomic(self); if (!was_pseudo_atomic) @@@@ -4317,7 +4319,7 @@@@ alloc(long nbytes) lispobj *result = general_alloc(nbytes, BOXED_PAGE_FLAG); -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY +#ifdef LISP_FEATURE_WIN32 if (!was_pseudo_atomic) clear_pseudo_atomic_atomic(self); #endif @@@@ -4432,12 +4434,8 @@@@ void gc_alloc_update_all_page_tables(void) { /* Flush the alloc regions updating the tables. */ struct thread *th; - for_each_thread(th) { + for_each_thread(th) gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); -#endif - } gc_alloc_update_page_tables(UNBOXED_PAGE_FLAG, &unboxed_region); gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &boxed_region); } diff --git src/runtime/interrupt.c src/runtime/interrupt.c index 882e2bb..d23dbd7 100644 --- src/runtime/interrupt.c +++ src/runtime/interrupt.c @@@@ -1779,89 +1779,6 @@@@ see_if_sigaction_nodefer_works(void) #undef SA_NODEFER_TEST_BLOCK_SIGNAL #undef SA_NODEFER_TEST_KILL_SIGNAL -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - -static void * -signal_thread_trampoline(void *pthread_arg) -{ - int signo = (int) pthread_arg; - os_context_t fake_context; - siginfo_t fake_info; -#ifdef LISP_FEATURE_PPC - mcontext_t uc_regs; -#endif - - memset(&fake_info, 0, sizeof(fake_info)); - memset(&fake_context, 0, sizeof(fake_context)); -#ifdef LISP_FEATURE_PPC - memset(&uc_regs, 0, sizeof(uc_regs)); - fake_context.uc_mcontext.uc_regs = &uc_regs; -#endif - - *os_context_pc_addr(&fake_context) = &signal_thread_trampoline; -#ifdef ARCH_HAS_STACK_POINTER /* aka x86(-64) */ - *os_context_sp_addr(&fake_context) = __builtin_frame_address(0); -#endif - - signal_handler_callback(interrupt_handlers[signo].lisp, - signo, &fake_info, &fake_context); - return 0; -} - -static void -sigprof_handler_trampoline(int signal, siginfo_t *info, void *void_context) -{ - SAVE_ERRNO(signal,context,void_context); - struct thread *self = arch_os_get_current_thread(); - - /* alloc() is not re-entrant and still uses pseudo atomic (even though - * inline allocation does not). In this case, give up. */ - if (get_pseudo_atomic_atomic(self)) - goto cleanup; - - struct alloc_region tmp = self->alloc_region; - self->alloc_region = self->sprof_alloc_region; - self->sprof_alloc_region = tmp; - - interrupt_handle_now_handler(signal, info, void_context); - - /* And we're back. We know that the SIGPROF handler never unwinds - * non-locally, and can simply swap things back: */ - - tmp = self->alloc_region; - self->alloc_region = self->sprof_alloc_region; - self->sprof_alloc_region = tmp; - -cleanup: - ; /* Dear C compiler, it's OK to have a label here. */ - RESTORE_ERRNO; -} - -static void -spawn_signal_thread_handler(int signal, siginfo_t *info, void *void_context) -{ - SAVE_ERRNO(signal,context,void_context); - - pthread_attr_t attr; - pthread_t th; - - if (pthread_attr_init(&attr)) - goto lost; - if (pthread_attr_setstacksize(&attr, thread_control_stack_size)) - goto lost; - if (pthread_create(&th, &attr, &signal_thread_trampoline, (void*) signal)) - goto lost; - if (pthread_attr_destroy(&attr)) - goto lost; - - RESTORE_ERRNO; - return; - -lost: - lose("spawn_signal_thread_handler"); -} -#endif - static void unblock_me_trampoline(int signal, siginfo_t *info, void *void_context) { @@@@ -1946,8 +1863,7 @@@@ undoably_install_low_level_interrupt_handler (int signal, /* This is called from Lisp. */ uword_t -install_handler(int signal, void handler(int, siginfo_t*, os_context_t*), - int synchronous) +install_handler(int signal, void handler(int, siginfo_t*, os_context_t*)) { #ifndef LISP_FEATURE_WIN32 struct sigaction sa; @@@@ -1964,12 +1880,6 @@@@ install_handler(int signal, void handler(int, siginfo_t*, os_context_t*), if (ARE_SAME_HANDLER(handler, SIG_DFL) || ARE_SAME_HANDLER(handler, SIG_IGN)) sa.sa_sigaction = (void (*)(int, siginfo_t*, void*))handler; -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY - else if (signal == SIGPROF) - sa.sa_sigaction = sigprof_handler_trampoline; - else if (!synchronous) - sa.sa_sigaction = spawn_signal_thread_handler; -#endif else if (sigismember(&deferrable_sigset, signal)) sa.sa_sigaction = maybe_now_maybe_later; else if (!sigaction_nodefer_works && diff --git src/runtime/interrupt.h src/runtime/interrupt.h index 07b4a2d..a27eb08 100644 --- src/runtime/interrupt.h +++ src/runtime/interrupt.h @@@@ -158,8 +158,7 @@@@ extern void undoably_install_low_level_interrupt_handler ( int signal, interrupt_handler_t handler); extern uword_t install_handler(int signal, - interrupt_handler_t handler, - int synchronous); + interrupt_handler_t handler); extern union interrupt_handler interrupt_handlers[NSIG]; diff --git src/runtime/runtime.c src/runtime/runtime.c index 49c007b..3bc18ee 100644 --- src/runtime/runtime.c +++ src/runtime/runtime.c @@@@ -95,7 +95,7 @@@@ void sigint_init(void) { SHOW("entering sigint_init()"); - install_handler(SIGINT, sigint_handler, 1); + install_handler(SIGINT, sigint_handler); SHOW("leaving sigint_init()"); } diff --git src/runtime/safepoint.c src/runtime/safepoint.c index 45af50e..a9e578c 100644 --- src/runtime/safepoint.c +++ src/runtime/safepoint.c @@@@ -966,26 +966,6 @@@@ handle_safepoint_violation(os_context_t *ctx, os_vm_address_t fault_address) } #endif /* LISP_FEATURE_WIN32 */ -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) -void -signal_handler_callback(lispobj run_handler, int signo, void *info, void *ctx) -{ - init_thread_data scribble; - void *args[2]; - args[0] = info; - args[1] = ctx; - - attach_os_thread(&scribble); - - odxprint(misc, "callback from signal handler thread for: %d\n", signo); - funcall3(StaticSymbolFunction(SIGNAL_HANDLER_CALLBACK), - run_handler, make_fixnum(signo), alloc_sap(args)); - - detach_os_thread(&scribble); - return; -} -#endif - void callback_wrapper_trampoline( #if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) diff --git src/runtime/thread.c src/runtime/thread.c index 46f8f7d..4d20d0f 100644 --- src/runtime/thread.c +++ src/runtime/thread.c @@@@ -401,9 +401,6 @@@@ undo_init_new_thread(struct thread *th, init_thread_data *scribble) #ifdef LISP_FEATURE_SB_SAFEPOINT block_blockable_signals(0, 0); gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); -#endif pop_gcing_safety(&scribble->safety); lock_ret = pthread_mutex_lock(&all_threads_lock); gc_assert(lock_ret == 0); @@@@ -421,9 +418,6 @@@@ undo_init_new_thread(struct thread *th, init_thread_data *scribble) gc_assert(lock_ret == 0); gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); -#endif unlink_thread(th); pthread_mutex_unlock(&all_threads_lock); gc_assert(lock_ret == 0); @@@@ -706,9 +700,6 @@@@ create_thread_struct(lispobj initial_function) { #endif #ifdef LISP_FEATURE_GENCGC gc_set_region_empty(&th->alloc_region); -# if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - gc_set_region_empty(&th->sprof_alloc_region); -# endif #endif #ifdef LISP_FEATURE_SB_THREAD /* This parallels the same logic in globals.c for the diff --git src/runtime/thread.h src/runtime/thread.h index 1a004c0..8bde9ba 100644 --- src/runtime/thread.h +++ src/runtime/thread.h @@@@ -422,11 +422,6 @@@@ int check_pending_thruptions(os_context_t *ctx); void attach_os_thread(init_thread_data *); void detach_os_thread(init_thread_data *); -# if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) - -void signal_handler_callback(lispobj, int, void *, void *); -# endif - #endif extern void create_initial_thread(lispobj); diff --git tests/signals.impure.lisp tests/signals.impure.lisp index c4f347e..716580c 100644 --- tests/signals.impure.lisp +++ tests/signals.impure.lisp @@@@ -70,15 +70,9 @@@@ :skipped-on :win32) (assert (eq :condition (handler-case - (progn - (sb-thread::kill-safely - (sb-thread::thread-os-thread sb-thread::*current-thread*) - sb-unix:sigint) - #+sb-safepoint-strictly - ;; In this case, the signals handler gets invoked - ;; indirectly through an INTERRUPT-THREAD. Give it - ;; enough time to hit. - (sleep 1)) + (sb-thread::kill-safely + (sb-thread::thread-os-thread sb-thread::*current-thread*) + sb-unix:sigint) (sb-sys:interactive-interrupt () :condition))))) diff --git tests/test-util.lisp tests/test-util.lisp index 20b2c54..1d44174 100644 --- tests/test-util.lisp +++ tests/test-util.lisp @@@@ -69,10 +69,6 @@@@ (setf ,threads (union (union *threads-to-kill* *threads-to-join*) ,threads)) - #+(and sb-safepoint-strictly (not win32)) - (dolist (thread (sb-thread:list-all-threads)) - (when (typep thread 'sb-thread:signal-handling-thread) - (ignore-errors (sb-thread:join-thread thread)))) (dolist (thread (sb-thread:list-all-threads)) (unless (or (not (sb-thread:thread-alive-p thread)) (eql thread sb-thread:*current-thread*) @