1.0.23.15: GET-MUTEX to set new mutex owner unithreaded platforms
authorNikodemus Siivola <nikodemus@random-state.net>
Wed, 3 Dec 2008 13:13:07 +0000 (13:13 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Wed, 3 Dec 2008 13:13:07 +0000 (13:13 +0000)
 * Can't believe no-one has complained about this...

src/code/target-thread.lisp
tests/threads.pure.lisp
version.lisp-expr

index c534ca0..3493cfc 100644 (file)
@@ -266,8 +266,13 @@ directly."
            #!-sb-thread (ignore waitp))
   (unless new-owner
     (setq new-owner *current-thread*))
-  (when (eql new-owner (mutex-%owner mutex))
-    (error "Recursive lock attempt ~S." mutex))
+  (let ((old (mutex-%owner mutex)))
+    (when (eq new-owner old)
+      (error "Recursive lock attempt ~S." mutex))
+    #!-sb-thread
+    (if old
+        (error "Strange deadlock on ~S in an unithreaded build?" mutex)
+        (setf (mutex-%owner mutex) new-owner)))
   #!+sb-thread
   (progn
     ;; FIXME: Lutexes do not currently support deadlines, as at least
index 8187b51..fbffaaa 100644 (file)
 
 (use-package :test-util)
 
+(with-test (:name mutex-owner)
+  ;; Make sure basics are sane on unithreaded ports as well
+  (let ((mutex (make-mutex)))
+    (get-mutex mutex)
+    (assert (eq *current-thread* (mutex-value mutex)))
+    (handler-bind ((warning #'error))
+      (release-mutex mutex))
+    (assert (not (mutex-value mutex)))))
+
+(with-test (:name spinlock-owner)
+  ;; Make sure basics are sane on unithreaded ports as well
+  (let ((spinlock (sb-thread::make-spinlock)))
+    (sb-thread::get-spinlock spinlock)
+    (assert (eq *current-thread* (sb-thread::spinlock-value spinlock)))
+    (handler-bind ((warning #'error))
+      (sb-thread::release-spinlock spinlock))
+    (assert (not (sb-thread::spinlock-value spinlock)))))
+
 ;;; Terminating a thread that's waiting for the terminal.
 
 #+sb-thread
index 14c8164..a87978a 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.23.14"
+"1.0.23.15"