Fix prev commit

It only worked if the freelist was already non-empty
vmware
Howard Chu 12 years ago
parent cd228b4722
commit 7333b6bdc9
  1. 18
      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_overflow_pages = 0;
txn->mt_dbs[dbi].md_entries = 0; txn->mt_dbs[dbi].md_entries = 0;
txn->mt_dbs[dbi].md_root = P_INVALID; txn->mt_dbs[dbi].md_root = P_INVALID;
{
if (!txn->mt_u.dirty_list[0].mid) {
MDB_cursor m2; MDB_cursor m2;
MDB_val key; MDB_val key, data;
/* make sure last page of freeDB is touched and on freelist /* make sure we have at least one dirty page in this txn
* otherwise if there are no other dirty pages in this txn, * otherwise these changes will be ignored.
* these changes will be ignored.
*/ */
key.mv_size = MAXKEYSIZE+1; key.mv_size = sizeof(txnid_t);
key.mv_data = NULL; 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); mdb_cursor_init(&m2, txn, FREE_DBI, NULL);
mdb_page_search(&m2, &key, MDB_PS_MODIFY); rc = mdb_cursor_put(&m2, &key, &data, 0);
} }
} }
leave: leave:

Loading…
Cancel
Save