1.0.26.4: less pessimal waitqueues
[sbcl.git] / tests / threads.pure.lisp
index 8187b51..cb1a827 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
                (values
                 (loop for r from 0 below n
                       collect
-                      (let ((r r))
-                        (sb-thread:make-thread (lambda ()
-                                                 (let ((sem semaphore))
-                                                   (dotimes (s i)
-                                                     (sb-thread:wait-on-semaphore sem))))
-                                               :name "reader")))
+                      (sb-thread:make-thread
+                       (lambda ()
+                         (let ((sem semaphore))
+                           (dotimes (s i)
+                             (sb-thread:wait-on-semaphore sem))))
+                       :name "reader"))
                 (* n i)))
              (make-writers (n readers i)
                (let ((j (* readers i)))
                     (let ((writers
                            (loop for w from 0 below n
                                  collect
-                                 (let ((w w))
-                                   (sb-thread:make-thread (lambda ()
-                                                            (let ((sem semaphore))
-                                                              (dotimes (s k)
-                                                                (sb-thread:signal-semaphore sem))))
-                                                          :name "writer")))))
+                                 (sb-thread:make-thread
+                                  (lambda ()
+                                    (let ((sem semaphore))
+                                      (dotimes (s k)
+                                        (sb-thread:signal-semaphore sem))))
+                                  :name "writer"))))
                       (assert (zerop rem))
                       writers)
                     (+ rem (* n k))))))