mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-25 00:59:45 -05:00
Get pid lock outside of rmutex
Avoid holding rmutex for longer than necessary.
This commit is contained in:
parent
5ca73f864f
commit
b1dc72b6b5
1 changed files with 9 additions and 8 deletions
|
|
@ -2078,14 +2078,6 @@ mdb_txn_renew0(MDB_txn *txn)
|
|||
pid_t pid = env->me_pid;
|
||||
pthread_t tid = pthread_self();
|
||||
|
||||
LOCK_MUTEX_R(env);
|
||||
for (i=0; i<env->me_txns->mti_numreaders; i++)
|
||||
if (env->me_txns->mti_readers[i].mr_pid == 0)
|
||||
break;
|
||||
if (i == env->me_maxreaders) {
|
||||
UNLOCK_MUTEX_R(env);
|
||||
return MDB_READERS_FULL;
|
||||
}
|
||||
if (!(env->me_flags & MDB_LIVE_READER)) {
|
||||
rc = mdb_reader_pid(env, Pidset, pid);
|
||||
if (rc) {
|
||||
|
|
@ -2094,6 +2086,15 @@ mdb_txn_renew0(MDB_txn *txn)
|
|||
}
|
||||
env->me_flags |= MDB_LIVE_READER;
|
||||
}
|
||||
|
||||
LOCK_MUTEX_R(env);
|
||||
for (i=0; i<env->me_txns->mti_numreaders; i++)
|
||||
if (env->me_txns->mti_readers[i].mr_pid == 0)
|
||||
break;
|
||||
if (i == env->me_maxreaders) {
|
||||
UNLOCK_MUTEX_R(env);
|
||||
return MDB_READERS_FULL;
|
||||
}
|
||||
env->me_txns->mti_readers[i].mr_pid = pid;
|
||||
env->me_txns->mti_readers[i].mr_tid = tid;
|
||||
if (i >= env->me_txns->mti_numreaders)
|
||||
|
|
|
|||
Loading…
Reference in a new issue