]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10212 LMDB: better fix
authorHoward Chu <hyc@openldap.org>
Fri, 3 May 2024 19:43:39 +0000 (20:43 +0100)
committerHoward Chu <hyc@openldap.org>
Fri, 3 May 2024 19:44:00 +0000 (20:44 +0100)
libraries/liblmdb/mdb.c

index bbc61c682aacf6a6adb87569c6f41a0e72eafb3a..03e28d48a4e0c4449077aefe892beaf64435fe9e 100644 (file)
@@ -3088,10 +3088,6 @@ mdb_txn_renew0(MDB_txn *txn)
                                        UNLOCK_MUTEX(rmutex);
                                        return MDB_READERS_FULL;
                                }
-                               if ((env->me_flags & MDB_RDONLY) && !ti->mti_txnid)  {
-                                       meta = mdb_env_pick_meta(env);
-                                       ti->mti_txnid = meta->mm_txnid;
-                               }
                                r = &ti->mti_readers[i];
                                /* Claim the reader slot, carefully since other code
                                 * uses the reader table un-mutexed: First reset the
@@ -3117,9 +3113,14 @@ mdb_txn_renew0(MDB_txn *txn)
                        do /* LY: Retry on a race, ITS#7970. */
                                r->mr_txnid = ti->mti_txnid;
                        while(r->mr_txnid != ti->mti_txnid);
+                       if (!r->mr_txnid && (env->me_flags & MDB_RDONLY)) {
+                               meta = mdb_env_pick_meta(env);
+                               r->mr_txnid = meta->mm_txnid;
+                       } else {
+                               meta = env->me_metas[r->mr_txnid & 1];
+                       }
                        txn->mt_txnid = r->mr_txnid;
                        txn->mt_u.reader = r;
-                       meta = env->me_metas[txn->mt_txnid & 1];
                }
 
        } else {