uint16_t x;
int rc, new_notls = 0;
- /* Setup db info */
- txn->mt_numdbs = env->me_numdbs;
- txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */
-
if (txn->mt_flags & MDB_TXN_RDONLY) {
+ /* Setup db info */
+ txn->mt_numdbs = env->me_numdbs;
+ txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */
if (!ti) {
meta = env->me_metas[ mdb_env_pick_meta(env) ];
txn->mt_txnid = meta->mm_txnid;
meta = env->me_metas[ mdb_env_pick_meta(env) ];
txn->mt_txnid = meta->mm_txnid;
}
+ /* Setup db info */
+ txn->mt_numdbs = env->me_numdbs;
txn->mt_txnid++;
#if MDB_DEBUG
if (txn->mt_txnid == mdb_debug_start)
}
tsize = sizeof(MDB_ntxn);
}
- size = tsize + env->me_maxdbs * (sizeof(MDB_db)+1);
+ size = tsize;
if (!(flags & MDB_RDONLY)) {
if (!parent) {
- txn = env->me_txn0;
+ txn = env->me_txn0; /* just reuse preallocated write txn */
txn->mt_flags = 0;
goto ok;
}
+ /* child txns use own copy of cursors */
size += env->me_maxdbs * sizeof(MDB_cursor *);
- /* child txns use parent's dbiseqs */
- if (!parent)
- size += env->me_maxdbs * sizeof(unsigned int);
}
+ size += env->me_maxdbs * (sizeof(MDB_db)+1);
if ((txn = calloc(1, size)) == NULL) {
DPRINTF(("calloc: %s", strerror(errno)));
txn->mt_dbiseqs = (unsigned int *)(txn->mt_cursors + env->me_maxdbs);
txn->mt_dbflags = (unsigned char *)(txn->mt_dbiseqs + env->me_maxdbs);
txn->mt_env = env;
+ txn->mt_dbxs = env->me_dbxs;
env->me_txn0 = txn;
} else {
rc = ENOMEM;