| @@ -1,560 +1,15 @@ | | | @@ -1,560 +1,15 @@ |
1 | $NetBSD: patch-revert-37d3828773e2f847bb1ed7522b0af4fb8e736fc8,v 1.1 2013/06/11 19:26:28 asau Exp $ | | 1 | $NetBSD: patch-revert-37d3828773e2f847bb1ed7522b0af4fb8e736fc8,v 1.2 2013/06/15 21:17:23 asau Exp $ |
2 | | | 2 | |
3 | Revert revision 37d3828773e2f847bb1ed7522b0af4fb8e736fc8 | | 3 | Suppress test introduced by revision 37d3828773e2f847bb1ed7522b0af4fb8e736fc8 |
4 | which breaks build on NetBSD. | | 4 | which breaks build on NetBSD. |
5 | | | 5 | |
6 | diff --git a/contrib/sb-sprof/Makefile contrib/sb-sprof/Makefile | | 6 | diff --git a/contrib/sb-sprof/Makefile contrib/sb-sprof/Makefile |
7 | index 7373c72..463ae52 100644 | | 7 | index 7373c72..463ae52 100644 |
8 | --- contrib/sb-sprof/Makefile | | 8 | --- contrib/sb-sprof/Makefile |
9 | +++ contrib/sb-sprof/Makefile | | 9 | +++ contrib/sb-sprof/Makefile |
10 | @@ -2,4 +2,4 @@ MODULE=sb-sprof | | 10 | @@ -2,4 +2,4 @@ MODULE=sb-sprof |
11 | include ../vanilla-module.mk | | 11 | include ../vanilla-module.mk |
12 | | | 12 | |
13 | test:: | | 13 | test:: |
14 | - $(SBCL) --eval '(load (format nil "SYS:CONTRIB;~:@(~A~);TEST.LISP" "$(MODULE)"))' </dev/null | | 14 | - $(SBCL) --eval '(load (format nil "SYS:CONTRIB;~:@(~A~);TEST.LISP" "$(MODULE)"))' </dev/null |
15 | + true | | 15 | + true |
16 | diff --git contrib/sb-sprof/sb-sprof.lisp contrib/sb-sprof/sb-sprof.lisp | | | |
17 | index 0d81649..775924a 100644 | | | |
18 | --- contrib/sb-sprof/sb-sprof.lisp | | | |
19 | +++ contrib/sb-sprof/sb-sprof.lisp | | | |
20 | @@ -792,9 +792,7 @@ The following keyword args are recognized: | | | |
21 | :mode mode)) | | | |
22 | (enable-call-counting) | | | |
23 | (setf *profiled-threads* threads) | | | |
24 | - (sb-sys:enable-interrupt sb-unix:sigprof | | | |
25 | - #'sigprof-handler | | | |
26 | - :synchronous t) | | | |
27 | + (sb-sys:enable-interrupt sb-unix:sigprof #'sigprof-handler) | | | |
28 | (ecase mode | | | |
29 | (:alloc | | | |
30 | (let ((alloc-signal (1- alloc-interval))) | | | |
31 | @@ -1407,23 +1405,6 @@ functions during statistical profiling." | | | |
32 | (with-profiling (:reset t :max-samples 1000 :report :graph) | | | |
33 | (test-0 7))) | | | |
34 | | | | |
35 | -(defun consalot () | | | |
36 | - (let ((junk '())) | | | |
37 | - (loop repeat 10000 do | | | |
38 | - (push (make-array 10) junk)) | | | |
39 | - junk)) | | | |
40 | - | | | |
41 | -(defun consing-test () | | | |
42 | - ;; 0.0001 chosen so that it breaks rather reliably when sprof does not | | | |
43 | - ;; respect pseudo atomic. | | | |
44 | - (with-profiling (:reset t :sample-interval 0.0001 :report :graph :loop nil) | | | |
45 | - (let ((target (+ (get-universal-time) 15))) | | | |
46 | - (princ #\.) | | | |
47 | - (force-output) | | | |
48 | - (loop | | | |
49 | - while (< (get-universal-time) target) | | | |
50 | - do (consalot))))) | | | |
51 | - | | | |
52 | | | | |
53 | ;;; provision | | | |
54 | (provide 'sb-sprof) | | | |
55 | diff --git make-config.sh make-config.sh | | | |
56 | index 6b720e0..1a0a547 100644 | | | |
57 | --- make-config.sh | | | |
58 | +++ make-config.sh | | | |
59 | @@ -544,7 +544,6 @@ case "$sbcl_os" in | | | |
60 | # roughly-equivalent magic nevertheless:) | | | |
61 | printf ' :sb-dynamic-core :os-provides-dlopen' >> $ltf | | | |
62 | printf ' :sb-thread :sb-safepoint :sb-thruption :sb-wtimer' >> $ltf | | | |
63 | - printf ' :sb-safepoint-strictly' >> $ltf | | | |
64 | # | | | |
65 | link_or_copy Config.$sbcl_arch-win32 Config | | | |
66 | link_or_copy $sbcl_arch-win32-os.h target-arch-os.h | | | |
67 | diff --git package-data-list.lisp-expr package-data-list.lisp-expr | | | |
68 | index 691a040..03ab6ee 100644 | | | |
69 | --- package-data-list.lisp-expr | | | |
70 | +++ package-data-list.lisp-expr | | | |
71 | @@ -2023,8 +2023,6 @@ is a good idea, but see SB-SYS re. blurring of boundaries." | | | |
72 | "THREAD-NAME" | | | |
73 | "THREAD-YIELD" | | | |
74 | "FOREIGN-THREAD" | | | |
75 | - #!+(and sb-safepoint-strictly (not win32)) | | | |
76 | - "SIGNAL-HANDLING-THREAD" | | | |
77 | ;; Memory barrier | | | |
78 | "BARRIER" | | | |
79 | ;; Mutexes | | | |
80 | diff --git src/code/target-signal.lisp src/code/target-signal.lisp | | | |
81 | index 3fd22f3..9fab9d1 100644 | | | |
82 | --- src/code/target-signal.lisp | | | |
83 | +++ src/code/target-signal.lisp | | | |
84 | @@ -117,25 +117,11 @@ | | | |
85 | (sb!alien:define-alien-routine ("install_handler" install-handler) | | | |
86 | sb!alien:unsigned-long | | | |
87 | (signal sb!alien:int) | | | |
88 | - (handler sb!alien:unsigned-long) | | | |
89 | - (synchronous boolean)) | | | |
90 | + (handler sb!alien:unsigned-long)) | | | |
91 | | | | |
92 | ;;;; interface to enabling and disabling signal handlers | | | |
93 | | | | |
94 | -;;; Note on the SYNCHRONOUS argument: On builds without pseudo-atomic, | | | |
95 | -;;; we have no way of knowing whether interrupted code was in an | | | |
96 | -;;; allocation sequence, and cannot delay signals until after | | | |
97 | -;;; allocation. Any signal that can occur asynchronously must be | | | |
98 | -;;; considered unsafe for immediate execution, and the invocation of its | | | |
99 | -;;; lisp handler will get delayed into a newly spawned signal handler | | | |
100 | -;;; thread. However, there are signals which we must handle | | | |
101 | -;;; immediately, because they occur synchonously (hence the boolean flag | | | |
102 | -;;; SYNCHRONOUS to this function), luckily implying that the signal | | | |
103 | -;;; happens only in specific places (illegal instructions, floating | | | |
104 | -;;; point instructions, certain system calls), hopefully ruling out the | | | |
105 | -;;; possibility that we would trigger it during allocation. | | | |
106 | - | | | |
107 | -(defun enable-interrupt (signal handler &key synchronous) | | | |
108 | +(defun enable-interrupt (signal handler) | | | |
109 | (declare (type (or function fixnum (member :default :ignore)) handler)) | | | |
110 | (/show0 "enable-interrupt") | | | |
111 | (flet ((run-handler (&rest args) | | | |
112 | @@ -149,8 +135,7 @@ | | | |
113 | (:ignore sig-ign) | | | |
114 | (t | | | |
115 | (sb!kernel:get-lisp-obj-address | | | |
116 | - #'run-handler))) | | | |
117 | - synchronous))) | | | |
118 | + #'run-handler)))))) | | | |
119 | (cond ((= result sig-dfl) :default) | | | |
120 | ((= result sig-ign) :ignore) | | | |
121 | (t (the (or function fixnum) | | | |
122 | @@ -162,26 +147,6 @@ | | | |
123 | (defun ignore-interrupt (signal) | | | |
124 | (enable-interrupt signal :ignore)) | | | |
125 | | | | |
126 | -;;;; Support for signal handlers which aren't. | | | |
127 | -;;;; | | | |
128 | -;;;; On safepoint builds, user-defined Lisp signal handlers do not run | | | |
129 | -;;;; in the handler for their signal, because we have no pseudo atomic | | | |
130 | -;;;; mechanism to prevent handlers from hitting during allocation. | | | |
131 | -;;;; Rather, the signal spawns off a fresh native thread, which calls | | | |
132 | -;;;; into lisp with a fake context through this callback: | | | |
133 | - | | | |
134 | -#!+(and sb-safepoint-strictly (not win32)) | | | |
135 | -(defun signal-handler-callback (run-handler signal args) | | | |
136 | - (sb!thread::initial-thread-function-trampoline | | | |
137 | - (sb!thread::make-signal-handling-thread :name "signal handler" | | | |
138 | - :signal-number signal) | | | |
139 | - nil (lambda () | | | |
140 | - (let* ((info (sb!sys:sap-ref-sap args 0)) | | | |
141 | - (context (sb!sys:sap-ref-sap args sb!vm:n-word-bytes))) | | | |
142 | - (funcall run-handler signal info context))) | | | |
143 | - nil nil nil nil)) | | | |
144 | - | | | |
145 | - | | | |
146 | ;;;; default LISP signal handlers | | | |
147 | ;;;; | | | |
148 | ;;;; Most of these just call ERROR to report the presence of the signal. | | | |
149 | @@ -272,13 +237,13 @@ | | | |
150 | "Enable all the default signals that Lisp knows how to deal with." | | | |
151 | (enable-interrupt sigint #'sigint-handler) | | | |
152 | (enable-interrupt sigterm #'sigterm-handler) | | | |
153 | - (enable-interrupt sigill #'sigill-handler :synchronous t) | | | |
154 | + (enable-interrupt sigill #'sigill-handler) | | | |
155 | #!-linux | | | |
156 | (enable-interrupt sigemt #'sigemt-handler) | | | |
157 | - (enable-interrupt sigfpe #'sb!vm:sigfpe-handler :synchronous t) | | | |
158 | - (enable-interrupt sigbus #'sigbus-handler :synchronous t) | | | |
159 | + (enable-interrupt sigfpe #'sb!vm:sigfpe-handler) | | | |
160 | + (enable-interrupt sigbus #'sigbus-handler) | | | |
161 | #!-linux | | | |
162 | - (enable-interrupt sigsys #'sigsys-handler :synchronous t) | | | |
163 | + (enable-interrupt sigsys #'sigsys-handler) | | | |
164 | #!-sb-wtimer | | | |
165 | (enable-interrupt sigalrm #'sigalrm-handler) | | | |
166 | #!-sb-thruption | | | |
167 | diff --git src/code/thread.lisp src/code/thread.lisp | | | |
168 | index 3d1ecd4..2cfd567 100644 | | | |
169 | --- src/code/thread.lisp | | | |
170 | +++ src/code/thread.lisp | | | |
171 | @@ -42,14 +42,6 @@ in future versions." | | | |
172 | "Type of native threads which are attached to the runtime as Lisp threads | | | |
173 | temporarily.") | | | |
174 | | | | |
175 | -#!+(and sb-safepoint-strictly (not win32)) | | | |
176 | -(def!struct (signal-handling-thread | | | |
177 | - (:include foreign-thread) | | | |
178 | - (:conc-name "THREAD-")) | | | |
179 | - #!+sb-doc | | | |
180 | - "Asynchronous signal handling thread." | | | |
181 | - (signal-number nil :type integer)) | | | |
182 | - | | | |
183 | (def!struct mutex | | | |
184 | #!+sb-doc | | | |
185 | "Mutex type." | | | |
186 | diff --git src/compiler/generic/objdef.lisp src/compiler/generic/objdef.lisp | | | |
187 | index 262f472..fda2758 100644 | | | |
188 | --- src/compiler/generic/objdef.lisp | | | |
189 | +++ src/compiler/generic/objdef.lisp | | | |
190 | @@ -434,8 +434,6 @@ | | | |
191 | #!+sb-safepoint (csp-around-foreign-call :c-type "lispobj *") | | | |
192 | #!+sb-safepoint (pc-around-foreign-call :c-type "lispobj *") | | | |
193 | #!+win32 (synchronous-io-handle-and-flag :c-type "HANDLE" :length 1) | | | |
194 | - #!+(and sb-safepoint-strictly (not win32)) | | | |
195 | - (sprof-alloc-region :c-type "struct alloc_region" :length 5) | | | |
196 | ;; KLUDGE: On alpha, until STEPPING we have been lucky and the 32 | | | |
197 | ;; bit slots came in pairs. However the C compiler will align | | | |
198 | ;; interrupt_contexts on a double word boundary. This logic should | | | |
199 | diff --git src/compiler/generic/parms.lisp src/compiler/generic/parms.lisp | | | |
200 | index 4661321..ca556c2 100644 | | | |
201 | --- src/compiler/generic/parms.lisp | | | |
202 | +++ src/compiler/generic/parms.lisp | | | |
203 | @@ -124,9 +124,7 @@ | | | |
204 | fdefinition-object | | | |
205 | #!+win32 sb!kernel::handle-win32-exception | | | |
206 | #!+sb-thruption sb!thread::run-interruption | | | |
207 | - #!+sb-safepoint sb!thread::enter-foreign-callback | | | |
208 | - #!+(and sb-safepoint-strictly (not win32)) | | | |
209 | - sb!unix::signal-handler-callback)) | | | |
210 | + #!+sb-safepoint sb!thread::enter-foreign-callback)) | | | |
211 | | | | |
212 | (defparameter *common-static-symbols* | | | |
213 | '(t | | | |
214 | diff --git src/compiler/ppc/macros.lisp src/compiler/ppc/macros.lisp | | | |
215 | index 262cc10..2fdfb7e 100644 | | | |
216 | --- src/compiler/ppc/macros.lisp | | | |
217 | +++ src/compiler/ppc/macros.lisp | | | |
218 | @@ -336,9 +336,6 @@ | | | |
219 | ;;; trap if ALLOC-TN's negative (handling the deferred interrupt) and | | | |
220 | ;;; using FLAG-TN - minus the large constant - to correct ALLOC-TN. | | | |
221 | (defmacro pseudo-atomic ((flag-tn) &body forms) | | | |
222 | - #!+sb-safepoint-strictly | | | |
223 | - `(progn ,flag-tn ,@forms (emit-safepoint)) | | | |
224 | - #!-sb-safepoint-strictly | | | |
225 | `(progn | | | |
226 | (without-scheduling () | | | |
227 | ;; Extra debugging stuff: | | | |
228 | diff --git src/compiler/x86-64/macros.lisp src/compiler/x86-64/macros.lisp | | | |
229 | index a397573..11a06fc 100644 | | | |
230 | --- src/compiler/x86-64/macros.lisp | | | |
231 | +++ src/compiler/x86-64/macros.lisp | | | |
232 | @@ -303,9 +303,9 @@ | | | |
233 | | | | |
234 | #!+sb-thread | | | |
235 | (defmacro pseudo-atomic (&rest forms) | | | |
236 | - #!+sb-safepoint-strictly | | | |
237 | + #!+win32 | | | |
238 | `(progn ,@forms (emit-safepoint)) | | | |
239 | - #!-sb-safepoint-strictly | | | |
240 | + #!-win32 | | | |
241 | (with-unique-names (label) | | | |
242 | `(let ((,label (gen-label))) | | | |
243 | (inst mov (make-ea :qword | | | |
244 | diff --git src/compiler/x86/macros.lisp src/compiler/x86/macros.lisp | | | |
245 | index 4050640..d7b6bc2 100644 | | | |
246 | --- src/compiler/x86/macros.lisp | | | |
247 | +++ src/compiler/x86/macros.lisp | | | |
248 | @@ -408,9 +408,9 @@ | | | |
249 | | | | |
250 | #!+sb-thread | | | |
251 | (defmacro pseudo-atomic (&rest forms) | | | |
252 | - #!+sb-safepoint-strictly | | | |
253 | + #!+win32 | | | |
254 | `(progn ,@forms (emit-safepoint)) | | | |
255 | - #!-sb-safepoint-strictly | | | |
256 | + #!-win32 | | | |
257 | (with-unique-names (label) | | | |
258 | `(let ((,label (gen-label))) | | | |
259 | (inst mov (make-ea :dword :disp (* 4 thread-pseudo-atomic-bits-slot)) | | | |
260 | diff --git src/runtime/gencgc.c src/runtime/gencgc.c | | | |
261 | index f4ffd2f..5829b5a 100644 | | | |
262 | --- src/runtime/gencgc.c | | | |
263 | +++ src/runtime/gencgc.c | | | |
264 | @@ -4306,7 +4306,9 @@ general_alloc(sword_t nbytes, int page_type_flag) | | | |
265 | lispobj AMD64_SYSV_ABI * | | | |
266 | alloc(long nbytes) | | | |
267 | { | | | |
268 | -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY | | | |
269 | +#ifdef LISP_FEATURE_WIN32 | | | |
270 | + /* WIN32 is currently the only platform where inline allocation is | | | |
271 | + * not pseudo atomic. */ | | | |
272 | struct thread *self = arch_os_get_current_thread(); | | | |
273 | int was_pseudo_atomic = get_pseudo_atomic_atomic(self); | | | |
274 | if (!was_pseudo_atomic) | | | |
275 | @@ -4317,7 +4319,7 @@ alloc(long nbytes) | | | |
276 | | | | |
277 | lispobj *result = general_alloc(nbytes, BOXED_PAGE_FLAG); | | | |
278 | | | | |
279 | -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY | | | |
280 | +#ifdef LISP_FEATURE_WIN32 | | | |
281 | if (!was_pseudo_atomic) | | | |
282 | clear_pseudo_atomic_atomic(self); | | | |
283 | #endif | | | |
284 | @@ -4432,12 +4434,8 @@ void gc_alloc_update_all_page_tables(void) | | | |
285 | { | | | |
286 | /* Flush the alloc regions updating the tables. */ | | | |
287 | struct thread *th; | | | |
288 | - for_each_thread(th) { | | | |
289 | + for_each_thread(th) | | | |
290 | gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); | | | |
291 | -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
292 | - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); | | | |
293 | -#endif | | | |
294 | - } | | | |
295 | gc_alloc_update_page_tables(UNBOXED_PAGE_FLAG, &unboxed_region); | | | |
296 | gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &boxed_region); | | | |
297 | } | | | |
298 | diff --git src/runtime/interrupt.c src/runtime/interrupt.c | | | |
299 | index 882e2bb..d23dbd7 100644 | | | |
300 | --- src/runtime/interrupt.c | | | |
301 | +++ src/runtime/interrupt.c | | | |
302 | @@ -1779,89 +1779,6 @@ see_if_sigaction_nodefer_works(void) | | | |
303 | #undef SA_NODEFER_TEST_BLOCK_SIGNAL | | | |
304 | #undef SA_NODEFER_TEST_KILL_SIGNAL | | | |
305 | | | | |
306 | -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
307 | - | | | |
308 | -static void * | | | |
309 | -signal_thread_trampoline(void *pthread_arg) | | | |
310 | -{ | | | |
311 | - int signo = (int) pthread_arg; | | | |
312 | - os_context_t fake_context; | | | |
313 | - siginfo_t fake_info; | | | |
314 | -#ifdef LISP_FEATURE_PPC | | | |
315 | - mcontext_t uc_regs; | | | |
316 | -#endif | | | |
317 | - | | | |
318 | - memset(&fake_info, 0, sizeof(fake_info)); | | | |
319 | - memset(&fake_context, 0, sizeof(fake_context)); | | | |
320 | -#ifdef LISP_FEATURE_PPC | | | |
321 | - memset(&uc_regs, 0, sizeof(uc_regs)); | | | |
322 | - fake_context.uc_mcontext.uc_regs = &uc_regs; | | | |
323 | -#endif | | | |
324 | - | | | |
325 | - *os_context_pc_addr(&fake_context) = &signal_thread_trampoline; | | | |
326 | -#ifdef ARCH_HAS_STACK_POINTER /* aka x86(-64) */ | | | |
327 | - *os_context_sp_addr(&fake_context) = __builtin_frame_address(0); | | | |
328 | -#endif | | | |
329 | - | | | |
330 | - signal_handler_callback(interrupt_handlers[signo].lisp, | | | |
331 | - signo, &fake_info, &fake_context); | | | |
332 | - return 0; | | | |
333 | -} | | | |
334 | - | | | |
335 | -static void | | | |
336 | -sigprof_handler_trampoline(int signal, siginfo_t *info, void *void_context) | | | |
337 | -{ | | | |
338 | - SAVE_ERRNO(signal,context,void_context); | | | |
339 | - struct thread *self = arch_os_get_current_thread(); | | | |
340 | - | | | |
341 | - /* alloc() is not re-entrant and still uses pseudo atomic (even though | | | |
342 | - * inline allocation does not). In this case, give up. */ | | | |
343 | - if (get_pseudo_atomic_atomic(self)) | | | |
344 | - goto cleanup; | | | |
345 | - | | | |
346 | - struct alloc_region tmp = self->alloc_region; | | | |
347 | - self->alloc_region = self->sprof_alloc_region; | | | |
348 | - self->sprof_alloc_region = tmp; | | | |
349 | - | | | |
350 | - interrupt_handle_now_handler(signal, info, void_context); | | | |
351 | - | | | |
352 | - /* And we're back. We know that the SIGPROF handler never unwinds | | | |
353 | - * non-locally, and can simply swap things back: */ | | | |
354 | - | | | |
355 | - tmp = self->alloc_region; | | | |
356 | - self->alloc_region = self->sprof_alloc_region; | | | |
357 | - self->sprof_alloc_region = tmp; | | | |
358 | - | | | |
359 | -cleanup: | | | |
360 | - ; /* Dear C compiler, it's OK to have a label here. */ | | | |
361 | - RESTORE_ERRNO; | | | |
362 | -} | | | |
363 | - | | | |
364 | -static void | | | |
365 | -spawn_signal_thread_handler(int signal, siginfo_t *info, void *void_context) | | | |
366 | -{ | | | |
367 | - SAVE_ERRNO(signal,context,void_context); | | | |
368 | - | | | |
369 | - pthread_attr_t attr; | | | |
370 | - pthread_t th; | | | |
371 | - | | | |
372 | - if (pthread_attr_init(&attr)) | | | |
373 | - goto lost; | | | |
374 | - if (pthread_attr_setstacksize(&attr, thread_control_stack_size)) | | | |
375 | - goto lost; | | | |
376 | - if (pthread_create(&th, &attr, &signal_thread_trampoline, (void*) signal)) | | | |
377 | - goto lost; | | | |
378 | - if (pthread_attr_destroy(&attr)) | | | |
379 | - goto lost; | | | |
380 | - | | | |
381 | - RESTORE_ERRNO; | | | |
382 | - return; | | | |
383 | - | | | |
384 | -lost: | | | |
385 | - lose("spawn_signal_thread_handler"); | | | |
386 | -} | | | |
387 | -#endif | | | |
388 | - | | | |
389 | static void | | | |
390 | unblock_me_trampoline(int signal, siginfo_t *info, void *void_context) | | | |
391 | { | | | |
392 | @@ -1946,8 +1863,7 @@ undoably_install_low_level_interrupt_handler (int signal, | | | |
393 | | | | |
394 | /* This is called from Lisp. */ | | | |
395 | uword_t | | | |
396 | -install_handler(int signal, void handler(int, siginfo_t*, os_context_t*), | | | |
397 | - int synchronous) | | | |
398 | +install_handler(int signal, void handler(int, siginfo_t*, os_context_t*)) | | | |
399 | { | | | |
400 | #ifndef LISP_FEATURE_WIN32 | | | |
401 | struct sigaction sa; | | | |
402 | @@ -1964,12 +1880,6 @@ install_handler(int signal, void handler(int, siginfo_t*, os_context_t*), | | | |
403 | if (ARE_SAME_HANDLER(handler, SIG_DFL) || | | | |
404 | ARE_SAME_HANDLER(handler, SIG_IGN)) | | | |
405 | sa.sa_sigaction = (void (*)(int, siginfo_t*, void*))handler; | | | |
406 | -#ifdef LISP_FEATURE_SB_SAFEPOINT_STRICTLY | | | |
407 | - else if (signal == SIGPROF) | | | |
408 | - sa.sa_sigaction = sigprof_handler_trampoline; | | | |
409 | - else if (!synchronous) | | | |
410 | - sa.sa_sigaction = spawn_signal_thread_handler; | | | |
411 | -#endif | | | |
412 | else if (sigismember(&deferrable_sigset, signal)) | | | |
413 | sa.sa_sigaction = maybe_now_maybe_later; | | | |
414 | else if (!sigaction_nodefer_works && | | | |
415 | diff --git src/runtime/interrupt.h src/runtime/interrupt.h | | | |
416 | index 07b4a2d..a27eb08 100644 | | | |
417 | --- src/runtime/interrupt.h | | | |
418 | +++ src/runtime/interrupt.h | | | |
419 | @@ -158,8 +158,7 @@ extern void undoably_install_low_level_interrupt_handler ( | | | |
420 | int signal, | | | |
421 | interrupt_handler_t handler); | | | |
422 | extern uword_t install_handler(int signal, | | | |
423 | - interrupt_handler_t handler, | | | |
424 | - int synchronous); | | | |
425 | + interrupt_handler_t handler); | | | |
426 | | | | |
427 | extern union interrupt_handler interrupt_handlers[NSIG]; | | | |
428 | | | | |
429 | diff --git src/runtime/runtime.c src/runtime/runtime.c | | | |
430 | index 49c007b..3bc18ee 100644 | | | |
431 | --- src/runtime/runtime.c | | | |
432 | +++ src/runtime/runtime.c | | | |
433 | @@ -95,7 +95,7 @@ void | | | |
434 | sigint_init(void) | | | |
435 | { | | | |
436 | SHOW("entering sigint_init()"); | | | |
437 | - install_handler(SIGINT, sigint_handler, 1); | | | |
438 | + install_handler(SIGINT, sigint_handler); | | | |
439 | SHOW("leaving sigint_init()"); | | | |
440 | } | | | |
441 | | | | |
442 | diff --git src/runtime/safepoint.c src/runtime/safepoint.c | | | |
443 | index 45af50e..a9e578c 100644 | | | |
444 | --- src/runtime/safepoint.c | | | |
445 | +++ src/runtime/safepoint.c | | | |
446 | @@ -966,26 +966,6 @@ handle_safepoint_violation(os_context_t *ctx, os_vm_address_t fault_address) | | | |
447 | } | | | |
448 | #endif /* LISP_FEATURE_WIN32 */ | | | |
449 | | | | |
450 | -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
451 | -void | | | |
452 | -signal_handler_callback(lispobj run_handler, int signo, void *info, void *ctx) | | | |
453 | -{ | | | |
454 | - init_thread_data scribble; | | | |
455 | - void *args[2]; | | | |
456 | - args[0] = info; | | | |
457 | - args[1] = ctx; | | | |
458 | - | | | |
459 | - attach_os_thread(&scribble); | | | |
460 | - | | | |
461 | - odxprint(misc, "callback from signal handler thread for: %d\n", signo); | | | |
462 | - funcall3(StaticSymbolFunction(SIGNAL_HANDLER_CALLBACK), | | | |
463 | - run_handler, make_fixnum(signo), alloc_sap(args)); | | | |
464 | - | | | |
465 | - detach_os_thread(&scribble); | | | |
466 | - return; | | | |
467 | -} | | | |
468 | -#endif | | | |
469 | - | | | |
470 | void | | | |
471 | callback_wrapper_trampoline( | | | |
472 | #if !(defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)) | | | |
473 | diff --git src/runtime/thread.c src/runtime/thread.c | | | |
474 | index 46f8f7d..4d20d0f 100644 | | | |
475 | --- src/runtime/thread.c | | | |
476 | +++ src/runtime/thread.c | | | |
477 | @@ -401,9 +401,6 @@ undo_init_new_thread(struct thread *th, init_thread_data *scribble) | | | |
478 | #ifdef LISP_FEATURE_SB_SAFEPOINT | | | |
479 | block_blockable_signals(0, 0); | | | |
480 | gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); | | | |
481 | -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
482 | - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); | | | |
483 | -#endif | | | |
484 | pop_gcing_safety(&scribble->safety); | | | |
485 | lock_ret = pthread_mutex_lock(&all_threads_lock); | | | |
486 | gc_assert(lock_ret == 0); | | | |
487 | @@ -421,9 +418,6 @@ undo_init_new_thread(struct thread *th, init_thread_data *scribble) | | | |
488 | gc_assert(lock_ret == 0); | | | |
489 | | | | |
490 | gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->alloc_region); | | | |
491 | -#if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
492 | - gc_alloc_update_page_tables(BOXED_PAGE_FLAG, &th->sprof_alloc_region); | | | |
493 | -#endif | | | |
494 | unlink_thread(th); | | | |
495 | pthread_mutex_unlock(&all_threads_lock); | | | |
496 | gc_assert(lock_ret == 0); | | | |
497 | @@ -706,9 +700,6 @@ create_thread_struct(lispobj initial_function) { | | | |
498 | #endif | | | |
499 | #ifdef LISP_FEATURE_GENCGC | | | |
500 | gc_set_region_empty(&th->alloc_region); | | | |
501 | -# if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
502 | - gc_set_region_empty(&th->sprof_alloc_region); | | | |
503 | -# endif | | | |
504 | #endif | | | |
505 | #ifdef LISP_FEATURE_SB_THREAD | | | |
506 | /* This parallels the same logic in globals.c for the | | | |
507 | diff --git src/runtime/thread.h src/runtime/thread.h | | | |
508 | index 1a004c0..8bde9ba 100644 | | | |
509 | --- src/runtime/thread.h | | | |
510 | +++ src/runtime/thread.h | | | |
511 | @@ -422,11 +422,6 @@ int check_pending_thruptions(os_context_t *ctx); | | | |
512 | void attach_os_thread(init_thread_data *); | | | |
513 | void detach_os_thread(init_thread_data *); | | | |
514 | | | | |
515 | -# if defined(LISP_FEATURE_SB_SAFEPOINT_STRICTLY) && !defined(LISP_FEATURE_WIN32) | | | |
516 | - | | | |
517 | -void signal_handler_callback(lispobj, int, void *, void *); | | | |
518 | -# endif | | | |
519 | - | | | |
520 | #endif | | | |
521 | | | | |
522 | extern void create_initial_thread(lispobj); | | | |
523 | diff --git tests/signals.impure.lisp tests/signals.impure.lisp | | | |
524 | index c4f347e..716580c 100644 | | | |
525 | --- tests/signals.impure.lisp | | | |
526 | +++ tests/signals.impure.lisp | | | |
527 | @@ -70,15 +70,9 @@ | | | |
528 | :skipped-on :win32) | | | |
529 | (assert (eq :condition | | | |
530 | (handler-case | | | |
531 | - (progn | | | |
532 | - (sb-thread::kill-safely | | | |
533 | - (sb-thread::thread-os-thread sb-thread::*current-thread*) | | | |
534 | - sb-unix:sigint) | | | |
535 | - #+sb-safepoint-strictly | | | |
536 | - ;; In this case, the signals handler gets invoked | | | |
537 | - ;; indirectly through an INTERRUPT-THREAD. Give it | | | |
538 | - ;; enough time to hit. | | | |
539 | - (sleep 1)) | | | |
540 | + (sb-thread::kill-safely | | | |
541 | + (sb-thread::thread-os-thread sb-thread::*current-thread*) | | | |
542 | + sb-unix:sigint) | | | |
543 | (sb-sys:interactive-interrupt () | | | |
544 | :condition))))) | | | |
545 | | | | |
546 | diff --git tests/test-util.lisp tests/test-util.lisp | | | |
547 | index 20b2c54..1d44174 100644 | | | |
548 | --- tests/test-util.lisp | | | |
549 | +++ tests/test-util.lisp | | | |
550 | @@ -69,10 +69,6 @@ | | | |
551 | (setf ,threads (union (union *threads-to-kill* | | | |
552 | *threads-to-join*) | | | |
553 | ,threads)) | | | |
554 | - #+(and sb-safepoint-strictly (not win32)) | | | |
555 | - (dolist (thread (sb-thread:list-all-threads)) | | | |
556 | - (when (typep thread 'sb-thread:signal-handling-thread) | | | |
557 | - (ignore-errors (sb-thread:join-thread thread)))) | | | |
558 | (dolist (thread (sb-thread:list-all-threads)) | | | |
559 | (unless (or (not (sb-thread:thread-alive-p thread)) | | | |
560 | (eql thread sb-thread:*current-thread*) | | | |