I was debugging a core dump from a crash inside ODB free_data() and after
refactoring free_data(), I may have fixed a bug in merging of free data blocks.
the case where freed data closed a gap between two free data blocks maybe had a
mistake, it should be fixed now. "free_block_1 | freed data | free_block_2"
becomes "free_block".
commit 9b54a1264b252b4e88c259c82afdf7e16b5a89eb
P.S.
1) to remember, odbedit now has a check and repair for the ODB free list, and I
just added one more test against ODB free list corruption (infinite loop if a
free block points at itself).
2) to test ODB edge cases, run "./bin/torture_odb --all". I now added an "odb
full" test which exercises most ODB free list edge cases.
K.O. |