Don't malloc the free_pgs list every time

This commit is contained in:
Howard Chu 2011-08-10 15:48:58 -07:00
parent 9f0b00b467
commit e3b668e84a

View File

@ -316,6 +316,7 @@ struct MDB_env {
MDB_db *me_dbs[2]; MDB_db *me_dbs[2];
MDB_oldpages *me_pghead; MDB_oldpages *me_pghead;
pthread_key_t me_txkey; /* thread-key for readers */ pthread_key_t me_txkey; /* thread-key for readers */
pgno_t me_free_pgs[MDB_IDL_UM_SIZE];
}; };
#define NODESIZE offsetof(MDB_node, mn_data) #define NODESIZE offsetof(MDB_node, mn_data)
@ -610,12 +611,7 @@ mdb_txn_begin(MDB_env *env, int rdonly, MDB_txn **ret)
pthread_mutex_lock(&env->me_txns->mt_wmutex); pthread_mutex_lock(&env->me_txns->mt_wmutex);
env->me_txns->mt_txnid++; env->me_txns->mt_txnid++;
txn->mt_free_pgs = malloc(MDB_IDL_UM_SIZEOF); txn->mt_free_pgs = env->me_free_pgs;
if (txn->mt_free_pgs == NULL) {
free(txn->mt_u.dirty_queue);
free(txn);
return ENOMEM;
}
txn->mt_free_pgs[0] = 0; txn->mt_free_pgs[0] = 0;
} }
@ -703,7 +699,6 @@ mdb_txn_abort(MDB_txn *txn)
STAILQ_REMOVE_HEAD(txn->mt_u.dirty_queue, h.md_next); STAILQ_REMOVE_HEAD(txn->mt_u.dirty_queue, h.md_next);
free(dp); free(dp);
} }
free(txn->mt_free_pgs);
free(txn->mt_u.dirty_queue); free(txn->mt_u.dirty_queue);
while ((mop = txn->mt_env->me_pghead)) { while ((mop = txn->mt_env->me_pghead)) {
@ -917,7 +912,6 @@ mdb_txn_commit(MDB_txn *txn)
} }
pthread_mutex_unlock(&env->me_txns->mt_wmutex); pthread_mutex_unlock(&env->me_txns->mt_wmutex);
free(txn->mt_free_pgs);
free(txn->mt_u.dirty_queue); free(txn->mt_u.dirty_queue);
free(txn); free(txn);
txn = NULL; txn = NULL;