ITS#7517 Don't save dropped dirty MDB databases.

mdb_txn_commit's attempt to save the DB could corrupt another DB if
another thread had called mdb_dbi_open and reused the closed DBI.
vmware
Hallvard Furuseth 12 years ago
parent 8e1bbdf0dd
commit c7db955a94
  1. 4
      libraries/liblmdb/mdb.c

@ -7146,8 +7146,10 @@ int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del)
/* Can't delete the main DB */ /* Can't delete the main DB */
if (del && dbi > MAIN_DBI) { if (del && dbi > MAIN_DBI) {
rc = mdb_del(txn, MAIN_DBI, &mc->mc_dbx->md_name, NULL); rc = mdb_del(txn, MAIN_DBI, &mc->mc_dbx->md_name, NULL);
if (!rc) if (!rc) {
txn->mt_dbflags[dbi] = DB_STALE;
mdb_dbi_close(txn->mt_env, dbi); mdb_dbi_close(txn->mt_env, dbi);
}
} else { } else {
/* reset the DB record, mark it dirty */ /* reset the DB record, mark it dirty */
txn->mt_dbflags[dbi] |= DB_DIRTY; txn->mt_dbflags[dbi] |= DB_DIRTY;

Loading…
Cancel
Save