projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.48.17: hopefully fix build on win32
[sbcl.git]
/
src
/
code
/
target-thread.lisp
diff --git
a/src/code/target-thread.lisp
b/src/code/target-thread.lisp
index
4b89ca8
..
89c5111
100644
(file)
--- a/
src/code/target-thread.lisp
+++ b/
src/code/target-thread.lisp
@@
-299,13
+299,16
@@
created and old ones may exit at any time."
;;;; Spinlocks
;;;; Spinlocks
-(defmacro with-deadlocks ((thread lock timeout) &body forms)
+(defmacro with-deadlocks ((thread lock &optional timeout) &body forms)
+ (declare (ignorable timeout))
(with-unique-names (prev n-thread n-lock n-timeout new)
`(let* ((,n-thread ,thread)
(,n-lock ,lock)
(with-unique-names (prev n-thread n-lock n-timeout new)
`(let* ((,n-thread ,thread)
(,n-lock ,lock)
- (,n-timeout (or ,timeout
- (when sb!impl::*deadline*
- sb!impl::*deadline-seconds*)))
+ (,n-timeout #!-sb-lutex
+ ,(when timeout
+ `(or ,timeout
+ (when sb!impl::*deadline*
+ sb!impl::*deadline-seconds*))))
;; If we get interrupted while waiting for a lock, etc.
(,prev (thread-waiting-for ,n-thread))
(,new (if ,n-timeout
;; If we get interrupted while waiting for a lock, etc.
(,prev (thread-waiting-for ,n-thread))
(,new (if ,n-timeout
@@
-331,7
+334,7
@@
created and old ones may exit at any time."
(when (eq old new)
(error "Recursive lock attempt on ~S." spinlock))
#!+sb-thread
(when (eq old new)
(error "Recursive lock attempt on ~S." spinlock))
#!+sb-thread
- (with-deadlocks (new spinlock nil)
+ (with-deadlocks (new spinlock)
(flet ((cas ()
(if (sb!ext:compare-and-swap (spinlock-value spinlock) nil new)
(thread-yield)
(flet ((cas ()
(if (sb!ext:compare-and-swap (spinlock-value spinlock) nil new)
(thread-yield)
@@
-440,9
+443,11
@@
HOLDING-MUTEX-P."
(detect-deadlock other-lock)))))))
(deadlock-chain (thread lock)
(let* ((other-thread (lock-owner lock))
(detect-deadlock other-lock)))))))
(deadlock-chain (thread lock)
(let* ((other-thread (lock-owner lock))
- (other-lock (thread-waiting-for other-thread)))
+ (other-lock (when other-thread
+ (thread-waiting-for other-thread))))
(cond ((not other-thread)
(cond ((not other-thread)
- ;; The deadlock is gone -- maybe someone timed out?
+ ;; The deadlock is gone -- maybe someone unwound
+ ;; from the same deadlock already?
(return-from check-deadlock nil))
((consp other-lock)
;; There's a timeout -- no deadlock.
(return-from check-deadlock nil))
((consp other-lock)
;; There's a timeout -- no deadlock.