1.0.16.39: small lisp-side interrupt handling improvements
authorNikodemus Siivola <nikodemus@random-state.net>
Mon, 19 May 2008 14:06:28 +0000 (14:06 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 19 May 2008 14:06:28 +0000 (14:06 +0000)
 * In INVOKE-INTERRUPTION, disable interrupts before doing the interrupt
   handler bindings -- no point in making the window for recursive interrupts
   any bigger then it already is.

 * Similarly, ALLOW-WITH-INTERRUPTS only after the *STACK-TOP-HINT*
   has been computed. (Actually, the stack top hint computation should
   not be done for all interrupts, instead it would be better to add
   an argument to indicate we want to start from the interrupted frame
   to MAP-BACKTRACE.)

 * Declare the &REST argument of (FLET RUN-HANDLER) dynamic extent.

src/code/target-signal.lisp
version.lisp-expr

index 073b4c9..95710d9 100644 (file)
@@ -30,8 +30,8 @@
        ,@body)))
 
 (defun invoke-interruption (function)
-  (with-interrupt-bindings
-    (without-interrupts
+  (without-interrupts
+    (with-interrupt-bindings
       ;; Reset signal mask: the C-side handler has blocked all
       ;; deferrable interrupts before arranging return to lisp. This is
       ;; safe because we can't get a pending interrupt before we unblock
@@ -40,9 +40,8 @@
       ;; FIXME: Should we not reset the _entire_ mask, but just
       ;; restore it to the state before we got the interrupt?
       (reset-signal-mask)
-      (allow-with-interrupts
-        (let ((sb!debug:*stack-top-hint* (nth-value 1 (sb!kernel:find-interrupted-name-and-frame))))
-          (funcall function))))))
+      (let ((sb!debug:*stack-top-hint* (nth-value 1 (sb!kernel:find-interrupted-name-and-frame))))
+        (allow-with-interrupts (funcall function))))))
 
 (defmacro in-interruption ((&key) &body body)
   #!+sb-doc
@@ -93,6 +92,7 @@
   (declare (type (or function fixnum (member :default :ignore)) handler))
   (/show0 "enable-interrupt")
   (flet ((run-handler (&rest args)
+           (declare (dynamic-extent args))
            (in-interruption ()
              (apply handler args))))
     (without-gcing
index 4a1cf0d..d795dbd 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.16.38"
+"1.0.16.39"