X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsignal.lisp;h=945f77cc479c57329bdf9da5d8b8f79890a36295;hb=cd1b14acf6f548b28b8a14e554d779f0473122ec;hp=9092524fa2d6973d137021bd2ea8136f8fc23657;hpb=55383ed448cbaeefc2dc91cdd24a6d5aa2810920;p=sbcl.git diff --git a/src/code/signal.lisp b/src/code/signal.lisp index 9092524..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 @@ -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))))