1.0.37.35: Rename WAITQUEUE-DATA to WAITQUEUE-TOKEN.
authorTobias C. Rittweiler <trittweiler@users.sourceforge.net>
Sat, 3 Apr 2010 19:56:28 +0000 (19:56 +0000)
committerTobias C. Rittweiler <trittweiler@users.sourceforge.net>
Sat, 3 Apr 2010 19:56:28 +0000 (19:56 +0000)
Naming it that way makes more sense because the slot's value is used
as token. It's also easier to refer to a waitqueue's token rather than
a waitqueue's datum in discussions.

NEWS
src/code/target-thread.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 9e9f18c..d0cd1d4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,10 @@
 ;;;; -*- coding: utf-8; fill-column: 78 -*-
 changes relative to sbcl-1.0.36:
-  * DEPRECIATION: the SB-QUEUE contrib was merged into the SB-CONCURRENCY
+  * INCOMPATIBLE CHANGE: Thread names are now restricted to SIMPLE-STRINGs
+    like for any other thread-related datastructure (MUTEX, etc.)
+  * DEPRECATION: the SB-QUEUE contrib was merged into the SB-CONCURRENCY
     contrib module. New code should depend on SB-CONCURRENCY, not SB-QUEUE.
-  * DEPRECIATION: SB-THEAD:GET-MUTEX was deprecated in favor of
+  * DEPRECATION: SB-THEAD:GET-MUTEX was deprecated in favor of
     SB-THREAD:GRAB-MUTEX.
   * new contrib: SB-CONCURRENCY is a new contrib; it's supposed to contain
     additional data structures and tools for concurrent programming; at the
index 914882c..9ab61b1 100644 (file)
@@ -540,7 +540,7 @@ IF-NOT-OWNER is :FORCE)."
   #!+(and sb-lutex sb-thread)
   (lutex (make-lutex))
   #!-sb-lutex
-  (data nil))
+  (token nil))
 
 (defun make-waitqueue (&key name)
   #!+sb-doc
@@ -552,9 +552,9 @@ IF-NOT-OWNER is :FORCE)."
       "The name of the waitqueue. Setfable.")
 
 #!+(and sb-thread (not sb-lutex))
-(define-structure-slot-addressor waitqueue-data-address
+(define-structure-slot-addressor waitqueue-token-address
     :structure waitqueue
-    :slot data)
+    :slot token)
 
 (defun condition-wait (queue mutex)
   #!+sb-doc
@@ -592,26 +592,26 @@ returning normally, it may do so without holding the mutex."
       ;; memory barrier semantics of lock acquire/release. This must
       ;; not be moved into the loop else wakeups may be lost upon
       ;; continuing after a deadline or EINTR.
-      (setf (waitqueue-data queue) me)
+      (setf (waitqueue-token queue) me)
       (loop
         (multiple-value-bind (to-sec to-usec)
             (allow-with-interrupts (decode-timeout nil))
           (case (unwind-protect
                      (with-pinned-objects (queue me)
                        ;; RELEASE-MUTEX is purposefully as close to
-                       ;; FUTEX-WAIT as possible to reduce the size
-                       ;; of the window where WAITQUEUE-DATA may be
-                       ;; set by a notifier.
+                       ;; FUTEX-WAIT as possible to reduce the size of
+                       ;; the window where the token may be set by a
+                       ;; notifier.
                        (release-mutex mutex)
                        ;; Now we go to sleep using futex-wait. If
                        ;; anyone else manages to grab MUTEX and call
                        ;; CONDITION-NOTIFY during this comment, it
-                       ;; will change queue->data, and so futex-wait
+                       ;; will change the token, and so futex-wait
                        ;; returns immediately instead of sleeping.
                        ;; Ergo, no lost wakeup. We may get spurious
                        ;; wakeups, but that's ok.
                        (allow-with-interrupts
-                         (futex-wait (waitqueue-data-address queue)
+                         (futex-wait (waitqueue-token-address queue)
                                      (get-lisp-obj-address me)
                                      ;; our way of saying "no
                                      ;; timeout":
@@ -627,7 +627,9 @@ returning normally, it may do so without holding the mutex."
             ;; signal a deadline unconditionally here because the
             ;; call to GET-MUTEX may already have signaled it.
             ((1))
-            ;; EINTR
+            ;; EINTR; we do not need to return to the caller because
+            ;; an interleaved wakeup would change the token causing an
+            ;; EWOULDBLOCK in the next iteration.
             ((2))
             ;; EWOULDBLOCK, -1 here, is the possible spurious wakeup
             ;; case. 0 is the normal wakeup.
@@ -658,9 +660,9 @@ this call."
     ;; ^-- surely futex_wake() involves a memory barrier?
     #!-sb-lutex
     (progn
-      (setf (waitqueue-data queue) queue)
+      (setf (waitqueue-token queue) queue)
       (with-pinned-objects (queue)
-        (futex-wake (waitqueue-data-address queue) n)))))
+        (futex-wake (waitqueue-token-address queue) n)))))
 
 (defun condition-broadcast (queue)
   #!+sb-doc
index 0d57c83..3441c01 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.37.34"
+"1.0.37.35"