Both those issues would certainly be problems if freeing of an unused tree node would be a direct call to the
allocator’s free()-function. To resolve this issue, solidDB uses a memory manager for versioned memory objects
[11] that guarantees the version number field is neither overwritten by an arbitrary value nor decremented. The
engine has a ”purge level” which is a deallocation counter value before the oldest index traversal started. When
an index traversal ends, it may increase the purge level. When the purge level increases, freed nodes can be
released to underlying memory manager. This ensures that the version-checking traversal remains safe even
when index nodes are freed. Recycling of memory to new versioned memory objects, i.e. index tree nodes, is
still possible, because unpurged freed nodes can be used as new versioned memory objects.