0.9.1.59:
[sbcl.git] / src / code / target-signal.lisp
index c492023..d358486 100644 (file)
@@ -55,6 +55,7 @@
 
 (defun enable-interrupt (signal handler)
   (declare (type (or function fixnum (member :default :ignore)) handler))
+  (/show0 "enable-interrupt")
   (without-gcing
    (let ((result (install-handler signal
                                  (case handler
 ;;; SIGINT in --disable-debugger mode will cleanly terminate the system
 ;;; (by respecting the *DEBUGGER-HOOK* established in that mode).
 (defun sigint-%break (format-string &rest format-arguments)
+  #!+sb-thread
+  (let ((foreground-thread (sb!thread::foreground-thread)))
+    (if (eql foreground-thread (sb!thread:current-thread-id))
+        (apply #'%break 'sigint format-string format-arguments)
+        (sb!thread:interrupt-thread
+         foreground-thread
+         (lambda () (apply #'%break 'sigint format-string format-arguments)))))
+  #!-sb-thread
   (apply #'%break 'sigint format-string format-arguments))
 
 (eval-when (:compile-toplevel :execute)
 
 (defun sigquit-handler (signal code context)
   (declare (ignore signal code context))
-  (throw 'sb!impl::toplevel-catcher nil))
+  (throw 'toplevel-catcher nil))
 
 (defun sb!kernel:signal-cold-init-or-reinit ()
   #!+sb-doc