X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-thread.lisp;h=038dad08a43a487c2495f12a5caec8f4eb73f79b;hb=e62bb3a4b9633dbd898fca05cc4af3dd0a16e0aa;hp=18bec356f5c35e494b3cc6e5dd66464a5a290cca;hpb=0a3d799b59df15a7fcd680182f88feda8704f261;p=sbcl.git diff --git a/src/code/target-thread.lisp b/src/code/target-thread.lisp index 18bec35..038dad0 100644 --- a/src/code/target-thread.lisp +++ b/src/code/target-thread.lisp @@ -301,7 +301,7 @@ created and old ones may exit at any time." (defmacro with-deadlocks ((thread lock &optional timeout) &body forms) (declare (ignorable timeout)) - (with-unique-names (prev n-thread n-lock n-timeout new) + (with-unique-names (n-thread n-lock n-timeout new) `(let* ((,n-thread ,thread) (,n-lock ,lock) (,n-timeout #!-sb-lutex @@ -309,8 +309,6 @@ created and old ones may exit at any time." `(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 (cons ,n-timeout ,n-lock) ,n-lock))) @@ -321,7 +319,9 @@ created and old ones may exit at any time." (progn (setf (thread-waiting-for ,n-thread) ,new) ,@forms) - (setf (thread-waiting-for ,n-thread) ,prev))))) + ;; Interrupt handlers and GC save and restore any + ;; previous wait marks using WITHOUT-DEADLOCKS below. + (setf (thread-waiting-for ,n-thread) nil))))) (declaim (inline get-spinlock release-spinlock))