X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fthread.lisp;h=01bbac7669ab8285067d35ea7e8f171ea71a3456;hb=ee90e535c985f697c71d839083aed16710f846fd;hp=fcf433b394ef91e9e23db8721dee0191533daa4f;hpb=f2847d6ed16e60390d000410d36ec7fb2570cdaf;p=sbcl.git diff --git a/src/code/thread.lisp b/src/code/thread.lisp index fcf433b..01bbac7 100644 --- a/src/code/thread.lisp +++ b/src/code/thread.lisp @@ -91,6 +91,15 @@ provided the default value is used for the mutex." (without-interrupts (allow-with-interrupts (funcall function))))) + (defun call-with-system-spinlock (function spinlock &optional without-gcing-p) + (declare (ignore spinlock) + (function function)) + (if without-gcing-p + (without-gcing + (funcall function)) + (without-interrupts + (allow-with-interrupts (funcall function))))) + (defun call-with-recursive-system-spinlock (function lock &optional without-gcing-p) (declare (ignore lock) @@ -138,6 +147,21 @@ provided the default value is used for the mutex." (without-interrupts (allow-with-interrupts (%call-with-system-mutex)))))) + (defun call-with-system-spinlock (function spinlock &optional without-gcing-p) + (declare (function function)) + (flet ((%call-with-system-spinlock () + (dx-let (got-it) + (unwind-protect + (when (setf got-it (get-spinlock spinlock)) + (funcall function)) + (when got-it + (release-spinlock spinlock)))))) + (if without-gcing-p + (without-gcing + (%call-with-system-spinlock)) + (without-interrupts + (allow-with-interrupts (%call-with-system-spinlock)))))) + (defun call-with-recursive-system-spinlock (function lock &optional without-gcing-p) (declare (function function))