> >> Another issue similar to ITS#8264 and ITS#8299, but this time using > >> mdb_cursor_del inside of the cursor causes corruption. mdb_del > >> causes corruption as well, but this is the first time that I have > >> seen mdb_cursor_del do the wrong thing. > >> > >> In this case, mdb_cursor_del incorrectly removes one extra key (a key > >> prefixed with 0c000000000000003a...) in addition to correctly > >> removing all of the keys that begin with 0d000000000000003a. > >> > >> mdb_del does not remove that extra key, but instead fails to remove > >> two 0d000000000000003a keys that should have been removed. > >> > >> I am not sure if these are two different bugs or if they are caused > >> by the same underlying issue. > > > > Similar reason, two different mistakes. Fixed now in git. > >> > >> mdb_cursor_del performs correctly on subsequent runs if you do *not* > >> remove the database between tests, whereas mdb_del continues to fail, > >> but stabilizes on a different set of results after the first run. >=20 > For future reference, here's a patch to your test program that also check= s for > cursors pointed adjacent to the item being deleted. The previous fix was > missing a step, fixed now. Note you must build LMDB with -DMDB_DEBUG > for the mdb_cursor_chk() function to be defined.
Just to confirm, are you saying that this is something that I should includ= e only in the test harness, or should these checks be in my actual library = as well? Thank you for taking the time to work through these bugs and address all of= the various edge cases. I really appreciate the help. Michael Alyn Miller
