I see what appears to be a possible problem in
Table::expungeRecordVersions(). It seems like this is supposed to
release a long string of old invisible record versions. The oldest
visible record is sent into it and the priorRecord chain from there down
is scavenged. It does this by detaching the priorRecord from the one
sent in, doing garbage collection on that prior, and releasing its
useCount. The useCount is always 1 due to the priorRecord pointer. So
the release at the end of Table::expungeRecordVersions() causes it to
be deleted. Its destructor will release all the priorRecords from there
to the end of the chain.
But where is the garbage collection done on each of these other prior
If I am right that the garbage collection is never done, then index
pages and blob records are left in the pages, filling up the tablespace.