mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-30 13:30:57 +08:00
Free write mutex earlier in txn_reset0
This commit is contained in:
parent
a7639a66a4
commit
9eede0b103
@ -2774,12 +2774,26 @@ mdb_txn_reset0(MDB_txn *txn, const char *act)
|
||||
txn->mt_numdbs = 0; /* close nothing if called again */
|
||||
txn->mt_dbxs = NULL; /* mark txn as reset */
|
||||
} else {
|
||||
pgno_t *pghead = env->me_pghead;
|
||||
env->me_pghead = NULL;
|
||||
env->me_pglast = 0;
|
||||
|
||||
if (!txn->mt_parent) {
|
||||
if (mdb_midl_shrink(&txn->mt_free_pgs))
|
||||
env->me_free_pgs = txn->mt_free_pgs;
|
||||
|
||||
env->me_txn = NULL;
|
||||
/* The writer mutex was locked in mdb_txn_begin. */
|
||||
if (env->me_txns)
|
||||
UNLOCK_MUTEX_W(env);
|
||||
}
|
||||
|
||||
mdb_cursors_close(txn, 0);
|
||||
|
||||
if (!(env->me_flags & MDB_WRITEMAP)) {
|
||||
mdb_dlist_free(txn);
|
||||
}
|
||||
mdb_midl_free(env->me_pghead);
|
||||
mdb_midl_free(pghead);
|
||||
|
||||
if (txn->mt_parent) {
|
||||
txn->mt_parent->mt_child = NULL;
|
||||
@ -2787,18 +2801,7 @@ mdb_txn_reset0(MDB_txn *txn, const char *act)
|
||||
mdb_midl_free(txn->mt_free_pgs);
|
||||
mdb_midl_free(txn->mt_spill_pgs);
|
||||
free(txn->mt_u.dirty_list);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mdb_midl_shrink(&txn->mt_free_pgs))
|
||||
env->me_free_pgs = txn->mt_free_pgs;
|
||||
env->me_pghead = NULL;
|
||||
env->me_pglast = 0;
|
||||
|
||||
env->me_txn = NULL;
|
||||
/* The writer mutex was locked in mdb_txn_begin. */
|
||||
if (env->me_txns)
|
||||
UNLOCK_MUTEX_W(env);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user