0.8.1.5:
[sbcl.git] / src / code / target-signal.lisp
index 9ad1f36..87f42d1 100644 (file)
@@ -61,7 +61,7 @@
 ;;;; interface to enabling and disabling signal handlers
 
 (defun enable-interrupt (signal-designator handler)
-  (declare (type (or function (member :default :ignore)) handler))
+  (declare (type (or function fixnum (member :default :ignore)) handler))
   (without-gcing
    (let ((result (install-handler (unix-signal-number signal-designator)
                                  (case handler
@@ -72,7 +72,7 @@
                                      handler))))))
      (cond ((= result sig_dfl) :default)
           ((= result sig_ign) :ignore)
-          (t (the function (sb!kernel:make-lisp-obj result)))))))
+          (t (the (or function fixnum) (sb!kernel:make-lisp-obj result)))))))
 
 (defun default-interrupt (signal)
   (enable-interrupt signal :default))
 #!-linux
 (define-signal-handler sigsys-handler "bad argument to a system call")
 (define-signal-handler sigpipe-handler "SIGPIPE")
-(define-signal-handler sigalrm-handler "SIGALRM")
+
+(defun sigalrm-handler (signal info context)
+  (declare (ignore signal info context))
+  (declare (type system-area-pointer context))
+  (cerror "Continue" 'sb!ext::timeout))
 
 (defun sigquit-handler (signal code context)
   (declare (ignore signal code context))