projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
disassemble: New customization variable sb-ext:*disassemble-annotate*.
[sbcl.git]
/
src
/
code
/
thread.lisp
diff --git
a/src/code/thread.lisp
b/src/code/thread.lisp
index
71dc92b
..
09c2cc4
100644
(file)
--- a/
src/code/thread.lisp
+++ b/
src/code/thread.lisp
@@
-73,7
+73,7
@@
stale value, use MUTEX-OWNER instead."
(define-deprecated-function :early "1.0.53.11" make-spinlock make-mutex (&key name)
(make-mutex :name name))
(define-deprecated-function :early "1.0.53.11" make-spinlock make-mutex (&key name)
(make-mutex :name name))
-(define-deprecated-function :early "1.0.5.x" spinlock-name mutex-name (lock)
+(define-deprecated-function :early "1.0.53.11" spinlock-name mutex-name (lock)
(mutex-name lock))
(define-deprecated-function :early "1.0.53.11" (setf spinlock-name) (setf mutex-name) (name lock)
(mutex-name lock))
(define-deprecated-function :early "1.0.53.11" (setf spinlock-name) (setf mutex-name) (name lock)
@@
-94,8
+94,8
@@
stale value, use MUTEX-OWNER instead."
,@body))
(sb!xc:defmacro with-spinlock ((lock) &body body)
,@body))
(sb!xc:defmacro with-spinlock ((lock) &body body)
- (deprecation-warning :early "1.0.53.11" 'with-recursive-spinlock 'with-mutex)
- `(with-lock (,lock)
+ (deprecation-warning :early "1.0.53.11" 'with-spinlock 'with-mutex)
+ `(with-mutex (,lock)
,@body))
(sb!xc:defmacro without-thread-waiting-for ((&key already-without-interrupts) &body body)
,@body))
(sb!xc:defmacro without-thread-waiting-for ((&key already-without-interrupts) &body body)
@@
-107,15
+107,22
@@
stale value, use MUTEX-OWNER instead."
'progn
'with-local-interrupts)))
`(let* ((,thread *current-thread*)
'progn
'with-local-interrupts)))
`(let* ((,thread *current-thread*)
- (,prev (thread-waiting-for ,thread)))
+ (,prev (progn
+ (barrier (:read))
+ (thread-waiting-for ,thread))))
(flet ((exec () ,@body))
(if ,prev
(,without
(unwind-protect
(progn
(setf (thread-waiting-for ,thread) nil)
(flet ((exec () ,@body))
(if ,prev
(,without
(unwind-protect
(progn
(setf (thread-waiting-for ,thread) nil)
+ (barrier (:write))
(,with (exec)))
(,with (exec)))
- (setf (thread-waiting-for ,thread) ,prev)))
+ ;; If we were waiting on a waitqueue, this becomes a bogus
+ ;; wakeup.
+ (when (mutex-p ,prev)
+ (setf (thread-waiting-for ,thread) ,prev)
+ (barrier (:write)))))
(exec)))))))
(sb!xc:defmacro with-mutex ((mutex &key (value '*current-thread*) (wait-p t))
(exec)))))))
(sb!xc:defmacro with-mutex ((mutex &key (value '*current-thread*) (wait-p t))
@@
-207,7
+214,7
@@
provided the default value is used for the mutex."
(funcall function)))
(defun call-with-recursive-system-lock/without-gcing (function mutex)
(funcall function)))
(defun call-with-recursive-system-lock/without-gcing (function mutex)
- (declare (function function) (ignore lock))
+ (declare (function function) (ignore mutex))
(without-gcing
(funcall function))))
(without-gcing
(funcall function))))