X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fthreads.impure.lisp;h=311e1d5c4656f4df46e8cfbab0ad8be0ac30d504;hb=2deecbd428dee535b5830e0686ad130f64110fb9;hp=8914dda661ad49f5541efa1a7e414fd9aa384c61;hpb=6501a925cc45f347d1243ce10d34e8b7202ae917;p=sbcl.git diff --git a/tests/threads.impure.lisp b/tests/threads.impure.lisp index 8914dda..311e1d5 100644 --- a/tests/threads.impure.lisp +++ b/tests/threads.impure.lisp @@ -344,11 +344,18 @@ (with-test (:name (:grab-mutex :timeout :acquisition-fail)) #+sb-lutex (error "Mutex timeout not supported here.") - (let ((m (make-mutex))) + (let ((m (make-mutex)) + (w (make-semaphore))) (with-mutex (m) - (assert (null (join-thread (make-thread - #'(lambda () - (grab-mutex m :timeout 0.1))))))))) + (let ((th (make-thread + #'(lambda () + (prog1 + (grab-mutex m :timeout 0.1) + (signal-semaphore w)))))) + ;; Wait for it to -- otherwise the detect the deadlock chain + ;; from JOIN-THREAD. + (wait-on-semaphore w) + (assert (null (join-thread th))))))) (with-test (:name (:grab-mutex :timeout :acquisition-success)) #+sb-lutex @@ -363,16 +370,18 @@ (with-test (:name (:grab-mutex :timeout+deadline)) #+sb-lutex (error "Mutex timeout not supported here.") - (let ((m (make-mutex))) + (let ((m (make-mutex)) + (w (make-semaphore))) (with-mutex (m) - (assert (eq (join-thread - (make-thread #'(lambda () - (sb-sys:with-deadline (:seconds 0.0) - (handler-case - (grab-mutex m :timeout 0.0) - (sb-sys:deadline-timeout () - :deadline)))))) - :deadline))))) + (let ((th (make-thread #'(lambda () + (sb-sys:with-deadline (:seconds 0.0) + (handler-case + (grab-mutex m :timeout 0.0) + (sb-sys:deadline-timeout () + (signal-semaphore w) + :deadline))))))) + (wait-on-semaphore w) + (assert (eq (join-thread th) :deadline)))))) (with-test (:name (:grab-mutex :waitp+deadline)) #+sb-lutex @@ -559,8 +568,6 @@ (defun alloc-stuff () (copy-list '(1 2 3 4 5))) (with-test (:name (:interrupt-thread :interrupt-consing-child)) - #+darwin - (error "Hangs on Darwin.") (let ((thread (sb-thread:make-thread (lambda () (loop (alloc-stuff)))))) (let ((killers (loop repeat 4 collect @@ -580,8 +587,6 @@ #+(or x86 x86-64) ;; x86oid-only, see internal commentary. (with-test (:name (:interrupt-thread :interrupt-consing-child :again)) - #+darwin - (error "Hangs on Darwin.") (let ((c (make-thread (lambda () (loop (alloc-stuff)))))) ;; NB this only works on x86: other ports don't have a symbol for ;; pseudo-atomic atomicity @@ -669,8 +674,6 @@ (assert (sb-thread:join-thread thread)))) (with-test (:name (:two-threads-running-gc)) - #+darwin - (error "Hangs on Darwin.") (let (a-done b-done) (make-thread (lambda () (dotimes (i 100) @@ -992,8 +995,6 @@ (format t "~&multiple reader hash table test done~%") (with-test (:name (:hash-table-single-accessor-parallel-gc)) - #+darwin - (error "Prone to hang on Darwin due to interrupt issues.") (let ((hash (make-hash-table)) (*errors* nil)) (let ((threads (list (sb-thread:make-thread