mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
Fix robust mutexes - repair mti_txnid.
Broken by e3b6c359a9, if
commit() crashes in write_meta before setting mti_txnid.
This commit is contained in:
parent
42110d83a9
commit
443a7e40c4
1 changed files with 6 additions and 1 deletions
|
|
@ -9492,7 +9492,7 @@ static int mdb_reader_check0(MDB_env *env, int rlocked, int *dead)
|
|||
*/
|
||||
static int mdb_mutex_failed(MDB_env *env, mdb_mutex_t *mutex, int rc)
|
||||
{
|
||||
int rlocked, rc2;
|
||||
int toggle, rlocked, rc2;
|
||||
#ifndef _WIN32
|
||||
enum { WAIT_ABANDONED = EOWNERDEAD };
|
||||
#endif
|
||||
|
|
@ -9502,6 +9502,11 @@ static int mdb_mutex_failed(MDB_env *env, mdb_mutex_t *mutex, int rc)
|
|||
rc = MDB_SUCCESS;
|
||||
rlocked = (mutex == MDB_MUTEX(env, r));
|
||||
if (!rlocked) {
|
||||
/* Keep mti_txnid updated, otherwise next writer can
|
||||
* overwrite data which latest meta page refers to.
|
||||
*/
|
||||
toggle = mdb_env_pick_meta(env);
|
||||
env->me_txns->mti_txnid = env->me_metas[toggle]->mm_txnid;
|
||||
/* env is hosed if the dead thread was ours */
|
||||
if (env->me_txn) {
|
||||
env->me_flags |= MDB_FATAL_ERROR;
|
||||
|
|
|
|||
Loading…
Reference in a new issue