• Kevin Modzelewski's avatar
    Class gc fix: integrate with the finalization logic · 440d8927
    Kevin Modzelewski authored
    I was noticing that classes were getting freed a few
    collections after they were seen to be not-marked; the
    issue with the old keep-classes-alive implementation is
    that it assumed that !isMarked() implies that the object
    will be freed in the sweep phase.  With the finalization
    ordering, this isn't true.  We could move the ordering
    before the keep-classes-alive behavior, but then the
    finalization ordering might get things wrong since it
    wouldn't see the final set of mark bits.  So I think
    we need to integrate the two phases.
    
    I think it ends up working to just say that type objects
    have ordered finalizers, even though they typically don't;
    I think this gets us the guarantees we need.
    440d8927
types.cpp 140 KB