Jonas Hahnfeld <hah...@hahnjo.de> writes: > Am Donnerstag, dem 25.11.2021 um 16:18 +0100 schrieb David Kastrup:
>> > System::init_elements has >> > >> > set_object (this, "all-elements", scm_arr); >> > >> > So *all_elements_ is protected as part of being a Spanner. As long as >> > the spanner has not committed suicide (when it drops its object list). >> > If it has committed suicide but not been collected yet, *all_elements_ >> > may be collected before the System itself. > > Ah ok, otherwise I would have argued that all_elements_ not being > initialized could only happen during construction of Systems, which is > not what I'm seeing in the backtrace of the crash... > >> > This is garbage. >> >> Check out <https://gitlab.com/lilypond/lilypond/-/merge_requests/1025> >> if you can trigger this with some frequency. > > Nope, still crashes in the same place. Huh. That would have been a rather obvious candidate. Still think this change is definitely warranted. >> Also it may be worth figuring out whether the crash occurs in >> connection with frenched systems (which are explicitly removed before >> the end of typesetting). > > How do I check this? The System that I'm marking still looks fine, as > far as I can tell, but the problem with GC issues is that it can also > be any other Grob running havoc (even though it's suspicious that I > only see it crashing in System::derived_mark...) Could be something that happens in the course of line breaking plus frenching? The original system may get frenched and the broken parts miss out on an all_elements_scm_ of their own as their savior? Something like that? Just stabbing around in the dark. The whole Grob_array thing is an abomination. -- David Kastrup