From 7333b6bdc90c49c332d4728c62c7904e64c95077 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sun, 30 Sep 2012 10:01:57 -0700 Subject: [PATCH] Fix prev commit It only worked if the freelist was already non-empty --- libraries/libmdb/mdb.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 53c0a4f..42e3382 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -6704,17 +6704,19 @@ int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del) txn->mt_dbs[dbi].md_overflow_pages = 0; txn->mt_dbs[dbi].md_entries = 0; txn->mt_dbs[dbi].md_root = P_INVALID; - { - MDB_cursor m2; - MDB_val key; - /* make sure last page of freeDB is touched and on freelist - * otherwise if there are no other dirty pages in this txn, - * these changes will be ignored. - */ - key.mv_size = MAXKEYSIZE+1; - key.mv_data = NULL; - mdb_cursor_init(&m2, txn, FREE_DBI, NULL); - mdb_page_search(&m2, &key, MDB_PS_MODIFY); + + if (!txn->mt_u.dirty_list[0].mid) { + MDB_cursor m2; + MDB_val key, data; + /* make sure we have at least one dirty page in this txn + * otherwise these changes will be ignored. + */ + key.mv_size = sizeof(txnid_t); + key.mv_data = &txn->mt_txnid; + data.mv_size = sizeof(MDB_ID); + data.mv_data = txn->mt_free_pgs; + mdb_cursor_init(&m2, txn, FREE_DBI, NULL); + rc = mdb_cursor_put(&m2, &key, &data, 0); } } leave: -- 2.7.4