Re: master: Stop finalizer in S-L-A-D only if no other threads exist
Stas Boukarev <[email protected]> Tue, 17 Feb 2026 19:14:05 +0300
| Newsgroups | gmane.lisp.steel-bank.cvs,gmane.lisp.steel-bank.devel |
|---|---|
| Message-ID | <CAF63=13zA3pwLc5oMeh9jGi_+55=W5y3xayMKu=6D+tvRj_5TQ@mail.gmail.com> |
And it's not limited to windows, the same error can be observed anywhere. On Tue, Feb 17, 2026 at 7:12 PM Stas Boukarev <[email protected]> wrote: > > On windows save7 fails with: > (and after adding > (format t "~a ~a ~a~%" threads starting joinable)) > > (#<THREAD tid=4240 "main thread" RUNNING {10020B0003}>) (#<THREAD > tid=0 "finalizer" RUNNING {1002060363}>) NIL > Unhandled SB-IMPL::SAVE-WITH-MULTIPLE-THREADS-ERROR in thread > #<SB-THREAD:THREAD tid=4240 "main thread" RUNNING > {10020B0003}>: > Cannot save core with multiple threads running. > > Interactive thread (of current session): > #<THREAD tid=4240 "main thread" RUNNING {10020B0003}> > > Other thread: > 0 > > On Tue, Feb 17, 2026 at 6:11 PM snuglas via Sbcl-commits > <[email protected]> wrote: > > > > The branch "master" has been updated in SBCL: > > via 55c0f2e12ab0bc9d1b11a50f4c9d20162740ba83 (commit) > > from 49044888b298a1ace613a918cdbd4b6ad5bfd586 (commit) > > > > - Log ----------------------------------------------------------------- > > commit 55c0f2e12ab0bc9d1b11a50f4c9d20162740ba83 > > Author: Douglas Katzman <[email protected]> > > Date: Tue Feb 17 10:10:56 2026 -0500 > > > > Stop finalizer in S-L-A-D only if no other threads exist > > --- > > src/code/save.lisp | 16 ++++++++-------- > > tests/save.impure.lisp | 11 +++++++++++ > > 2 files changed, 19 insertions(+), 8 deletions(-) > > > > diff --git a/src/code/save.lisp b/src/code/save.lisp > > index 8db5f7e4a..977a3da5f 100644 > > --- a/src/code/save.lisp > > +++ b/src/code/save.lisp > > @@ -324,20 +324,20 @@ sufficiently motivated to do lengthy fixes." > > #+sb-thread > > (let (error) > > (with-system-mutex (sb-thread::*make-thread-lock*) > > - (finalizer-thread-stop) > > (sb-thread::%dispose-thread-structs) > > (let ((threads (sb-thread:list-all-threads)) > > (starting > > (setq sb-thread::*starting-threads* ; ordinarily pruned in MAKE-THREAD > > (delete 0 sb-thread::*starting-threads*))) > > (joinable sb-thread::*joinable-threads*)) > > - (when (or (cdr threads) starting joinable) > > - (let* ((interactive (sb-thread::interactive-threads)) > > - (other (union (set-difference threads interactive) > > - (union starting joinable)))) > > - (setf error (make-condition 'save-with-multiple-threads-error > > - :interactive-threads interactive > > - :other-threads other)))))) > > + (if (or (cdr threads) starting joinable) > > + (let* ((interactive (sb-thread::interactive-threads)) > > + (other (union (set-difference threads interactive) > > + (union starting joinable)))) > > + (setf error (make-condition 'save-with-multiple-threads-error > > + :interactive-threads interactive > > + :other-threads other))) > > + (finalizer-thread-stop)))) > > (when error (error error)) > > #+allocator-metrics (setq sb-thread::*allocator-metrics* nil) > > (setq sb-thread::*sprof-data* nil)) > > diff --git a/tests/save.impure.lisp b/tests/save.impure.lisp > > index 364451ce6..1635e31be 100644 > > --- a/tests/save.impure.lisp > > +++ b/tests/save.impure.lisp > > @@ -27,3 +27,14 @@ > > (setf donep t) > > (sb-thread:condition-notify cvar)) > > (sb-thread:join-thread thread))) > > + > > +(with-test (:name (sb-ext:save-lisp-and-die error :multiple-threads-2)) > > + (let* ((sem (sb-thread:make-semaphore)) > > + (thread (sb-thread:make-thread > > + (lambda () (sb-thread:wait-on-semaphore sem))))) > > + (assert (eq (handler-case (save-lisp-and-die "expect_failure") > > + (sb-impl::save-with-multiple-threads-error () 'ok)) > > + 'ok)) > > + (assert (sb-thread::thread-p sb-impl::*finalizer-thread*)) > > + (sb-thread:signal-semaphore sem) > > + (sb-thread:join-thread thread))) > > > > ----------------------------------------------------------------------- > > > > > > hooks/post-receive > > -- > > SBCL > > > > > > _______________________________________________ > > Sbcl-commits mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/sbcl-commits _______________________________________________ Sbcl-commits mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sbcl-commits