printed to stderr.
* optimization: slightly faster gc on multithreaded builds
* optimization: faster WITHOUT-GCING
+ * bug fix: when JOIN-THREAD signals an error, do it when not holding
+ important locks so that the debugger/handler doesn't produce
+ recursive errors or deadlock.
* bug fix: real-time signals are not used anymore, so no more
hanging when the system wide real-time signal queue gets full.
* bug fix: finalizers, gc hooks never run in a WITHOUT-INTERRUPTS
"Suspend current thread until THREAD exits. Returns the result
values of the thread function. If the thread does not exit normally,
return DEFAULT if given or else signal JOIN-THREAD-ERROR."
- (with-mutex ((thread-result-lock thread))
+ (with-system-mutex ((thread-result-lock thread) :allow-with-interrupts t)
(cond ((car (thread-result thread))
- (values-list (cdr (thread-result thread))))
+ (return-from join-thread
+ (values-list (cdr (thread-result thread)))))
(defaultp
- default)
- (t
- (error 'join-thread-error :thread thread)))))
+ (return-from join-thread default))))
+ (error 'join-thread-error :thread thread))
(defun destroy-thread (thread)
#!+sb-doc
:default sym)))))
(with-test (:name '(:join-thread :nlx :error))
- (raises-error? (join-thread (make-thread (lambda () (sb-ext:quit))))))
+ (raises-error? (join-thread (make-thread (lambda () (sb-ext:quit))))
+ join-thread-error))
(with-test (:name '(:join-thread :multiple-values))
(assert (equal '(1 2 3)
;;; 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.25.39"
+"1.0.25.40"