mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-07 23:51:21 -05:00
Fix reader txn locking
This commit is contained in:
parent
e3b668e84a
commit
51e210c604
1 changed files with 10 additions and 11 deletions
|
|
@ -621,21 +621,20 @@ mdb_txn_begin(MDB_env *env, int rdonly, MDB_txn **ret)
|
|||
if (!r) {
|
||||
unsigned int i;
|
||||
pthread_mutex_lock(&env->me_txns->mt_mutex);
|
||||
for (i=0; i<env->me_maxreaders; i++) {
|
||||
if (env->me_txns->mt_readers[i].mr_pid == 0) {
|
||||
env->me_txns->mt_readers[i].mr_pid = getpid();
|
||||
env->me_txns->mt_readers[i].mr_tid = pthread_self();
|
||||
r = &env->me_txns->mt_readers[i];
|
||||
pthread_setspecific(env->me_txkey, r);
|
||||
if (i >= env->me_txns->mt_numreaders)
|
||||
env->me_txns->mt_numreaders = i+1;
|
||||
for (i=0; i<env->me_txns->mt_numreaders; i++)
|
||||
if (env->me_txns->mt_readers[i].mr_pid == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&env->me_txns->mt_mutex);
|
||||
if (i == env->me_maxreaders) {
|
||||
pthread_mutex_unlock(&env->me_txns->mti_mutex);
|
||||
return ENOSPC;
|
||||
}
|
||||
env->me_txns->mt_readers[i].mr_pid = getpid();
|
||||
env->me_txns->mt_readers[i].mr_tid = pthread_self();
|
||||
r = &env->me_txns->mt_readers[i];
|
||||
pthread_setspecific(env->me_txkey, r);
|
||||
if (i >= env->me_txns->mt_numreaders)
|
||||
env->me_txns->mt_numreaders = i+1;
|
||||
pthread_mutex_unlock(&env->me_txns->mt_mutex);
|
||||
}
|
||||
r->mr_txnid = txn->mt_txnid;
|
||||
txn->mt_u.reader = r;
|
||||
|
|
|
|||
Loading…
Reference in a new issue