From: Howard Chu Date: Fri, 19 Jul 2013 16:55:10 +0000 (-0700) Subject: Get pid lock outside of rmutex X-Git-Tag: OPENLDAP_REL_ENG_2_4_36~32^2~1 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b1dc72b6b54e81ff8db8a7666df47db317cfcc4f;p=openldap Get pid lock outside of rmutex Avoid holding rmutex for longer than necessary. --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index a4f6238e00..1e26d16ed4 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -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; ime_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; ime_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)