From: Hallvard Furuseth Date: Sat, 16 Feb 2013 18:08:37 +0000 (+0100) Subject: ITS#7517 Don't save dropped dirty MDB databases. X-Git-Tag: OPENLDAP_REL_ENG_2_4_34~3^2~16 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c7db955a94344b028ffba506bea1b5c2ecd564ca;p=openldap 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. --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 40b9bda484..715d1c811a 100644 --- a/libraries/liblmdb/mdb.c +++ b/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 */ if (del && dbi > MAIN_DBI) { 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); + } } else { /* reset the DB record, mark it dirty */ txn->mt_dbflags[dbi] |= DB_DIRTY;