Index: source/tools/portable-threads.lisp =================================================================== --- source/tools/portable-threads.lisp (revision 573) +++ source/tools/portable-threads.lisp (working copy) @@ -1344,7 +1344,7 @@ #+scl (progn (mp:without-scheduling - (let ((.current-thread. mp:*current-process*) + (let ((.current-thread. (mp:current-process)) (.holding-thread. (mp::lock-process ,lock-sym))) (unless (eq .current-thread. .holding-thread.) (non-holder-lock-release-error @@ -1670,6 +1670,14 @@ (cv :initform (sb-thread:make-waitqueue) :reader condition-variable-cv))) +#+scl +(defclass condition-variable () + ((lock :initarg :lock + :initform (mp:make-lock "CV Lock" :type :recursive :auto-free t) + :reader condition-variable-lock) + (cv :initform (thread:make-cond-var "Portable Threads" :auto-free t) + :reader condition-variable-cv))) + #+threads-not-available (defclass condition-variable () ((lock :initarg :lock @@ -1756,7 +1764,9 @@ (mp:process-allow-scheduling) (mp:process-lock lock)) #+(and sbcl sb-thread) - (sb-thread:condition-wait (condition-variable-cv condition-variable) lock)) + (sb-thread:condition-wait (condition-variable-cv condition-variable) lock) + #+scl + (thread:cond-var-wait (condition-variable-cv condition-variable) lock)) #+threads-not-available (declare (ignore condition-variable)) #+threads-not-available @@ -1857,7 +1867,9 @@ (sb-thread:condition-wait (condition-variable-cv condition-variable) lock) 't) - (sb-ext:timeout () nil)))) + (sb-ext:timeout () nil))) + #+scl + (thread:cond-var-timedwait (condition-variable-cv condition-variable) lock seconds)) #+threads-not-available (declare (ignore condition-variable seconds)) #+threads-not-available @@ -1882,7 +1894,9 @@ #+(and ecl threads) (mp:condition-variable-signal (condition-variable-cv condition-variable)) #+(and sbcl sb-thread) - (sb-thread:condition-notify (condition-variable-cv condition-variable))) + (sb-thread:condition-notify (condition-variable-cv condition-variable)) + #+scl + (thread:cond-var-signal (condition-variable-cv condition-variable))) ;;; --------------------------------------------------------------------------- @@ -1910,7 +1924,9 @@ #+(and ecl threads) (mp:condition-variable-broadcast (condition-variable-cv condition-variable)) #+(and sbcl sb-thread) - (sb-thread:condition-broadcast (condition-variable-cv condition-variable))) + (sb-thread:condition-broadcast (condition-variable-cv condition-variable)) + #+scl + (thread:cond-var-broadcast (condition-variable-cv condition-variable))) ;;; =========================================================================== ;;; Scheduled Functions (built entirely on top of Portable Threads substrate)