X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-multithread.lisp;h=b2d23506430d331c9ff69dd502869560b2a8caad;hb=3fe0010d2777b41e01ea9b4a0f894cfa40f7df1b;hp=ce284adcd5c4e5c41ad56480c48f163b16c0023f;hpb=94ea2b2082deaa0331dfb66fa6af6ca12dd8dc83;p=sbcl.git diff --git a/src/code/target-multithread.lisp b/src/code/target-multithread.lisp index ce284ad..b2d2350 100644 --- a/src/code/target-multithread.lisp +++ b/src/code/target-multithread.lisp @@ -177,20 +177,21 @@ time we reacquire LOCK and return to the caller." ;; output streams, and we don't necessarily have any (or we ;; could be sharing them) (unwind-protect - (catch 'sb!impl::%end-of-the-world - (with-simple-restart - (terminate-thread - (format nil "~~@" - *current-thread*)) - ;; now that most things have a chance to work - ;; properly without messing up other threads, it's - ;; time to enable signals - (sb!unix::reset-signal-mask) - (unwind-protect - (funcall real-function) - ;; we're going down, can't handle - ;; interrupts sanely anymore - (sb!unix::block-blockable-signals)))) + (catch 'sb!impl::toplevel-catcher + (catch 'sb!impl::%end-of-the-world + (with-simple-restart + (terminate-thread + (format nil "~~@" + *current-thread*)) + ;; now that most things have a chance to work + ;; properly without messing up other threads, it's + ;; time to enable signals + (sb!unix::reset-signal-mask) + (unwind-protect + (funcall real-function) + ;; we're going down, can't handle + ;; interrupts sanely anymore + (sb!unix::block-blockable-signals))))) ;; mark the thread dead, so that the gc does not ;; wait for it to handle sig-stop-for-gc (%set-thread-state thread :dead)