X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsignal.lisp;h=945f77cc479c57329bdf9da5d8b8f79890a36295;hb=7f579b076a1fc54587538ead07e506e7f06f3fe8;hp=8d2174313cbde521b7e29d0bbafc139489e10a27;hpb=ae09f8fd7765f6cab6ad317a13e27ff22ab0c11e;p=sbcl.git diff --git a/src/code/signal.lisp b/src/code/signal.lisp index 8d21743..945f77c 100644 --- a/src/code/signal.lisp +++ b/src/code/signal.lisp @@ -50,6 +50,7 @@ (defvar *interrupts-enabled* t) (defvar *interrupt-pending* nil) +#!+sb-thruption (defvar *thruption-pending* nil) (defvar *allow-with-interrupts* t) ;;; This is to support signal handlers that want to return to the ;;; interrupted context without leaving anything extra on the stack. A @@ -102,7 +103,7 @@ WITHOUT-INTERRUPTS in: (lambda () (with-local-interrupts ...))) " (with-unique-names (outer-allow-with-interrupts without-interrupts-body) - `(flet ((,without-interrupts-body () + `(dx-flet ((,without-interrupts-body () (declare (disable-package-locks allow-with-interrupts with-local-interrupts)) (macrolet @@ -122,7 +123,8 @@ WITHOUT-INTERRUPTS in: (setq *unblock-deferrables-on-enabling-interrupts-p* nil) (sb!unix::unblock-deferrable-signals)) - (when *interrupt-pending* + (when (or *interrupt-pending* + #!+sb-thruption *thruption-pending*) (receive-pending-interrupt))) (locally ,@with-forms)))) (let ((*interrupts-enabled* nil) @@ -144,7 +146,8 @@ WITHOUT-INTERRUPTS in: ;; another WITHOUT-INTERRUPTS, the pending interrupt will be ;; handled immediately upon exit from said ;; WITHOUT-INTERRUPTS, so it is as if nothing has happened. - (when *interrupt-pending* + (when (or *interrupt-pending* + #!+sb-thruption *thruption-pending*) (receive-pending-interrupt))) (,without-interrupts-body))))) @@ -169,7 +172,8 @@ by ALLOW-WITH-INTERRUPTS." (when *unblock-deferrables-on-enabling-interrupts-p* (setq *unblock-deferrables-on-enabling-interrupts-p* nil) (sb!unix::unblock-deferrable-signals)) - (when *interrupt-pending* + (when (or *interrupt-pending* + #!+sb-thruption *thruption-pending*) (receive-pending-interrupt))) (locally ,@body)))) @@ -189,6 +193,6 @@ by ALLOW-WITH-INTERRUPTS." (defun %check-interrupts () ;; Here we check for pending interrupts first, because reading a ;; special is faster then binding it! - (when *interrupt-pending* + (when (or *interrupt-pending* #!+sb-thruption *thruption-pending*) (let ((*interrupts-enabled* t)) (receive-pending-interrupt))))