1 (in-package "SB!THREAD")
3 (defvar *session-lock*)
5 (sb!xc:defmacro with-recursive-lock ((mutex) &body body)
7 (with-unique-names (cfp)
8 `(let ((,cfp (ash (sb!sys:sap-int (sb!vm::current-fp) ) -2)))
9 (unless (and (mutex-value ,mutex)
10 (SB!DI::control-stack-pointer-valid-p
11 (sb!sys:int-sap (ash (mutex-value ,mutex) 2))))
12 (get-mutex ,mutex ,cfp))
15 (when (eql (mutex-value ,mutex) ,cfp) (release-mutex ,mutex)))))
20 (defun get-foreground ()
21 (when (not (eql (mutex-value *session-lock*) (current-thread-id)))
22 (get-mutex *session-lock*))
23 (sb!sys:enable-interrupt :sigint #'sb!unix::sigint-handler)
26 (defun get-foreground () t)
29 (defun release-foreground ()
30 (sb!sys:enable-interrupt :sigint :ignore)
31 (release-mutex *session-lock*)
34 (defun release-foreground () t)