X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-unithread.lisp;h=e11ec9d3eb188d17b4e920b55101bcfb700ec42a;hb=51cf665f514935c8067f86f3850fd917731cada0;hp=c684a3c32be8bbbc10c78f76fa4e4b10d7814adf;hpb=34dcb46f78a01d543756703d7ccdf3d999a134d0;p=sbcl.git diff --git a/src/code/target-unithread.lisp b/src/code/target-unithread.lisp index c684a3c..e11ec9d 100644 --- a/src/code/target-unithread.lisp +++ b/src/code/target-unithread.lisp @@ -91,8 +91,15 @@ (setf old-value t1)))) (defmacro with-mutex ((mutex &key value (wait-p t)) &body body) - (declare (ignore mutex value wait-p)) - `(progn ,@body)) + (cond ((not wait-p) + `(unless (mutex-value ,mutex) + (unwind-protect + (progn + (setf (mutex-value ,mutex) (or ,value t)) + ,@body) + (setf (mutex-value ,mutex) nil)))) + (t + `(progn ,@body)))) ;;; what's the best thing to do with these on unithread? #+NIl