mdb_txn_reset0(MDB_txn *txn)
{
MDB_env *env = txn->mt_env;
- unsigned int i;
-
- /* If there were uncommitted dbi_opens, undo them now */
- for (i=env->me_numdbs; i<txn->mt_numdbs; i++)
- mdb_dbi_close(env, i);
if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) {
if (!(env->me_flags & MDB_ROFS))
} else {
MDB_oldpages *mop;
MDB_page *dp;
+ unsigned int i;
/* close(free) all cursors */
for (i=0; i<txn->mt_numdbs; i++) {
mdb_default_cmp(txn, slot);
if (!unused) {
txn->mt_numdbs++;
+ txn->mt_env->me_numdbs++;
}
}
void mdb_dbi_close(MDB_env *env, MDB_dbi dbi)
{
char *ptr;
- if (dbi <= MAIN_DBI || dbi >= env->me_maxdbs)
+ if (dbi <= MAIN_DBI || dbi >= env->me_numdbs)
return;
- /* If the dbi is greater than env->me_numdbs, no harm is done.
- * And it may happen if we're closing a DB that was just opened,
- * but the opening txn hadn't committed yet.
- */
ptr = env->me_dbxs[dbi].md_name.mv_data;
env->me_dbxs[dbi].md_name.mv_data = NULL;
env->me_dbxs[dbi].md_name.mv_size = 0;