X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-thread.lisp;h=8c7c1fec9ec49e383b2def214c0d0d5a14b3d271;hb=374667fd8a38e79869e63d56bacde7ad98a40852;hp=9ab61b18f7ca16ff07de83f872f693c1e02eaf1d;hpb=cf8e7223bce9948aaa764fd407871f0c441b3097;p=sbcl.git diff --git a/src/code/target-thread.lisp b/src/code/target-thread.lisp index 9ab61b1..8c7c1fe 100644 --- a/src/code/target-thread.lisp +++ b/src/code/target-thread.lisp @@ -361,8 +361,7 @@ HOLDING-MUTEX-P." #!+sb-doc "Deprecated in favor of GRAB-MUTEX." (declare (type mutex mutex) (optimize (speed 3)) - #!-sb-thread (ignore waitp timeout) - #!+sb-lutex (ignore timeout)) + #!-sb-thread (ignore waitp timeout)) (unless new-owner (setq new-owner *current-thread*)) (let ((old (mutex-%owner mutex))) @@ -385,12 +384,15 @@ HOLDING-MUTEX-P." ;; but has that been checked?) (2) after the lutex call, but ;; before setting the mutex owner. #!+sb-lutex - (when (zerop (with-lutex-address (lutex (mutex-lutex mutex)) - (if waitp - (with-interrupts (%lutex-lock lutex)) - (%lutex-trylock lutex)))) - (setf (mutex-%owner mutex) new-owner) - t) + (progn + (when timeout + (error "Mutex timeouts not supported on this platform.")) + (when (zerop (with-lutex-address (lutex (mutex-lutex mutex)) + (if waitp + (with-interrupts (%lutex-lock lutex)) + (%lutex-trylock lutex)))) + (setf (mutex-%owner mutex) new-owner) + t)) #!-sb-lutex ;; This is a direct translation of the Mutex 2 algorithm from ;; "Futexes are Tricky" by Ulrich Drepper. @@ -444,7 +446,8 @@ non-NIL and the mutex is in use, sleep until it is available. If TIMEOUT is given, it specifies a relative timeout, in seconds, on how long GRAB-MUTEX should try to acquire the lock in the contested -case. +case. Unsupported on :SB-LUTEX platforms (eg. Darwin), where a non-NIL +TIMEOUT signals an error. If GRAB-MUTEX returns T, the lock acquisition was successful. In case of WAITP being NIL, or an expired TIMEOUT, GRAB-MUTEX may also return @@ -468,9 +471,6 @@ Notes: ALLOW-WITH-INTERRUPTS allows the call to be interrupted from sleep. - - The TIMEOUT parameter is currently only supported on non-SB-LUTEX - platforms like Linux or BSD. - - (GRAB-MUTEX :timeout 0.0) differs from (GRAB-MUTEX :waitp nil) in that the former may signal a DEADLINE-TIMEOUT if the global deadline was due already on