Mon Aug 10 15:48:22 CEST 2009
Apparently there's a problem with finalization of atoms: if the
unreachable garbage space contains more than one reference to an atom,
its finalization will be called twice.
It looks like atoms that have a free() method need to be wrapped in a
vector, to make sure they only appear once in the heap.
So, the data needs a different encoding.
Let's start from what we need in the GC:
An object that needs finalization which is not idempotent needs to be
wrapped in a vector.
OK: solved by removing the 'atom' type, but requiring that every
finalizer found in the heap is followed a pointer to finalize. This
gives a simple mechanism to build wrapper vectors around arbitrary
(aligned) pointers: the client just needs to ensure that each object
occurs only in a single vector, and use that vector as the opaque
representation of the object.