Hi, Howard. This is a bug (seems minor), I fixed it in the MDBX few days ago. https://github.com/leo-yuriev/libmdbx/commit/9fd7056b4f02098914d813f38ba1ed2103c6b855#diff-185afae163fe87013315d2545a8b6055R3095
Inside freelist_save() the mt_loose_pages could be merged into the mt_free_pgs. http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=blob;f=libraries/liblmdb/mdb.c;h=1bf81ed4c87901991b7cac885b0d8cbc4dd23436;hb=bb8502f08800a44a6b91a94d6478aa7101c4cc77#l3444 But at this point all loose_pages also still present in the mt_u.dirty_list. On the next loop inside freelist_save() a one more page could be requested, and page_alloc() could return a page which is already in the mt_u.dirty_list. In this case mdb_mid2l_insert() will return -1. 2017-10-16 13:51 GMT+03:00 Howard Chu <h...@symas.com>: > timur.kris...@gmail.com wrote: >> >> Hi, >> >> I have an app that uses LMDB, and I've experienced an interesting >> issue: when trying to delete a certain item with mdb_cursor_del, it >> crashed with the following backtrace: https://pastebin.com/7p9wtkj9 >> >> It appears that it couldn't mark a page as dirty. >> Here is the relevant assertion from mdb_page_dirty: >> rc = insert(txn->mt_u.dirty_list, &mid); >> mdb_tassert(txn, rc == 0); // assertion failed >> >> What might I be doing wrong in my application that triggers this sort >> of error? > > > Take a look at the value of rc, then look in midl.c. Most likely the dirty > list is too big, which means you're trying to do too much in a single > transaction. > > >> Also interesting: >> The database was about 60MB, and I now compacted it using mdb_copy -c. >> Now it is only ~6MB, and running the app with the compacted database, >> the above error also disappeared. >> >> I'm not sure why the compacting fixed the problem, could somebody offer >> an insight about this? >> >> Thank you guys in advance for your answers! >> Best regards, >> Timur >> >> >> > > > -- > -- Howard Chu > CTO, Symas Corp. http://www.symas.com > Director, Highland Sun http://highlandsun.com/hyc/ > Chief Architect, OpenLDAP http://www.openldap.org/project/ >