Am Dienstag, 5. Dezember 2006 20:39 schrieb Matt Diephouse: > The portion of the assertion that > fails is > > !(((s)->obj.flags) & b_PObj_on_free_list_FLAG > > which means that this string has been garbage collected. I saw a > couple different instances of this problem and in all of them, the > string in question was a constant (some were C-level and others were > PIR-level). > > So the underlying problem is that constant strings are getting > collected when they shouldn't.
constants reside, when correctly created, in different object pools than GC-able items (constant_pmc_pool, constant_string_header_pool). PMCs in the constant_pmc_pool are marked during GC. No constant pool item is swept during GC, i.e the are only collect on interpreter shutdown. If above assert triggers, then some item are created in the wrong pool and then stored as constants. To track that further down, it'll be helpful to have some information about the origin & contents of the GC-ed constant, but typically such creation code is in imcc or packfile. leo