]> git.sur5r.net Git - openldap/commitdiff
Merge remote-tracking branch 'origin/mdb.master'
authorHoward Chu <hyc@openldap.org>
Fri, 19 Jul 2013 17:02:24 +0000 (10:02 -0700)
committerHoward Chu <hyc@openldap.org>
Fri, 19 Jul 2013 17:02:24 +0000 (10:02 -0700)
libraries/liblmdb/mdb.c

index a4f6238e0019076d60e8f1f114093eeb09827557..4d686007ba3b358b0318f8fe7eb4ef850f30810a 100644 (file)
@@ -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)
@@ -8091,11 +8092,13 @@ int mdb_reader_check(MDB_env *env, int *dead)
                        if (mdb_pid_insert(pids, pid) == 0) {
                                if (mdb_reader_pid(env, Pidcheck, pid)) {
                                        LOCK_MUTEX_R(env);
-                                       for (j=i; j<rdrs; j++)
-                                               if (mr[j].mr_pid == pid) {
-                                                       mr[j].mr_pid = 0;
-                                                       count++;
-                                               }
+                                       if (mdb_reader_pid(env, Pidcheck, pid)) {
+                                               for (j=i; j<rdrs; j++)
+                                                       if (mr[j].mr_pid == pid) {
+                                                               mr[j].mr_pid = 0;
+                                                               count++;
+                                                       }
+                                       }
                                        UNLOCK_MUTEX_R(env);
                                }
                        }