sb-bsd-sockets: check for MAKE-ALIEN success in GET-PROTOCOL-BY-NAME
[sbcl.git] / contrib / sb-concurrency / tests / test-mailbox.lisp
index a0f0386..e6cee14 100644 (file)
   (3 nil (#\1 #\2 #\3) nil)
   (0 t nil t))
 
-;;; FIXME: Several tests disabled on Darwin due to hangs. Something not right
-;;; with mailboxes -- or possibly semaphores -- there.
-#+(and sb-thread (not darwin))
+#+sb-thread
+(deftest mailbox-timeouts
+    (let* ((mbox (make-mailbox))
+           (writers (loop for i from 1 upto 20
+                          collect (make-thread
+                                   (lambda (x)
+                                     (loop repeat 50
+                                           do (send-message mbox x)
+                                              (sleep 0.001)))
+                                   :arguments i)))
+           (readers (loop repeat 10
+                          collect (make-thread
+                                   (lambda ()
+                                     (loop while (receive-message mbox :timeout 0.1)
+                                           count t))))))
+      (mapc #'join-thread writers)
+      (apply #'+ (mapcar #'join-thread readers)))
+  1000)
+
+;;; FIXME: Several tests disabled on Darwin and SunOS due to hangs.
+;;;
+;;; On Darwin at least the issues don't seem to have anything to do with
+;;; mailboxes per-se, but are rather related to our usage of signal-unsafe
+;;; pthread functions inside signal handlers.
+#+(and sb-thread (not (or darwin sunos)))
 (progn
 
 ;; Dummy struct for ATOMIC-INCF to work.
 (deftest mailbox.single-producer-single-consumer
     (test-mailbox-producers-consumers :n-senders 1
                                       :n-receivers 1
-                                      :n-messages 10000)
-  (:received . 10000)
+                                      :n-messages 1000)
+  (:received . 1000)
   (:garbage  . 0)
   (:errors   . 0)
   (:timeouts . 0))
 (deftest mailbox.single-producer-multiple-consumers
     (test-mailbox-producers-consumers :n-senders 1
                                       :n-receivers 100
-                                      :n-messages 10000)
-  (:received . 10000)
+                                      :n-messages 1000)
+  (:received . 1000)
   (:garbage  . 0)
   (:errors   . 0)
   (:timeouts . 0))
 
 (deftest mailbox.multiple-producers-single-consumer
-    (test-mailbox-producers-consumers :n-senders 100
+    (test-mailbox-producers-consumers :n-senders 10
                                       :n-receivers 1
                                       :n-messages 100)
-  (:received . 10000)
+  (:received . 1000)
   (:garbage  . 0)
   (:errors   . 0)
   (:timeouts . 0))
 (deftest mailbox.multiple-producers-multiple-consumers
     (test-mailbox-producers-consumers :n-senders 100
                                       :n-receivers 100
-                                      :n-messages 10000)
-  (:received . 1000000)
+                                      :n-messages 1000)
+  (:received . 100000)
   (:garbage  . 0)
   (:errors   . 0)
   (:timeouts . 0))
   (:garbage  . 0)
   (:timeouts . 0))
 
-) ; #+sb-thread (progn ...
\ No newline at end of file
+) ; #+sb-thread (progn ...