Max, I would put this text to a comment for clarity. Feel free to ignore. On 11/20/23 17:53, Igor Munkin wrote: > The reason of two consequent calls is not for "mark and > sweep" but rather for "full GC cycle + finalization of the resurrected > objects". The first call implements full (even 1.5) GC cycle; as a > result of this call some *objects* can be *released*, but the > corresponding *memory* is preserved in another list (gc->mmudata, IIRC) > to properly finalize the object (i.e. call __gc metamethod). Hence, the > second call finally releases the memory for the objects resurrected > within the sweep phase of the first call. > > Since Max allocates plain FFI objects with no finalizers, > there is no need in the second call here. >