(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 (or darwin sunos)))
+#+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 SunOS due to hangs.
+;;;
+;;; 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 sunos))
(progn
;; Dummy struct for ATOMIC-INCF to work.
(:timeouts . 0))
(deftest mailbox.multiple-producers-multiple-consumers
- (test-mailbox-producers-consumers :n-senders 100
- :n-receivers 100
+ (test-mailbox-producers-consumers :n-senders 50
+ :n-receivers 50
:n-messages 1000)
- (:received . 100000)
+ (:received . 50000)
(:garbage . 0)
(:errors . 0)
(:timeouts . 0))
(deftest mailbox.interrupts-safety.1
(multiple-value-bind (received garbage errors timeouts)
(test-mailbox-producers-consumers
- :n-senders 100
- :n-receivers 100
+ :n-senders 50
+ :n-receivers 50
:n-messages 1000
:interruptor #'(lambda (threads &aux (n (length threads)))
;; 99 so even in the unlikely case that only