]> git.sur5r.net Git - openldap/commitdiff
ITS#8157 mdb_txn_renew0(): init after error checks
authorHallvard Furuseth <hallvard@openldap.org>
Wed, 27 May 2015 20:26:54 +0000 (22:26 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Wed, 27 May 2015 22:12:18 +0000 (00:12 +0200)
libraries/liblmdb/mdb.c

index 86635bfea63fe80b1437c266261780fe7bf74186..71852b1f6e107711932b5e3de82064000af28b7c 100644 (file)
@@ -2498,15 +2498,11 @@ mdb_txn_renew0(MDB_txn *txn)
        MDB_env *env = txn->mt_env;
        MDB_txninfo *ti = env->me_txns;
        MDB_meta *meta;
-       unsigned int i, nr;
+       unsigned int i, nr, flags = txn->mt_flags;
        uint16_t x;
        int rc, new_notls = 0;
 
-       if (txn->mt_flags & MDB_TXN_RDONLY) {
-               txn->mt_flags = MDB_TXN_RDONLY;
-               /* Setup db info */
-               txn->mt_numdbs = env->me_numdbs;
-               txn->mt_dbxs = env->me_dbxs;    /* mostly static anyway */
+       if ((flags &= MDB_TXN_RDONLY) != 0) {
                if (!ti) {
                        meta = env->me_metas[ mdb_env_pick_meta(env) ];
                        txn->mt_txnid = meta->mm_txnid;
@@ -2559,6 +2555,7 @@ mdb_txn_renew0(MDB_txn *txn)
                        txn->mt_u.reader = r;
                        meta = env->me_metas[txn->mt_txnid & 1];
                }
+               txn->mt_dbxs = env->me_dbxs;    /* mostly static anyway */
        } else {
                if (ti) {
                        LOCK_MUTEX_W(env);
@@ -2569,14 +2566,11 @@ mdb_txn_renew0(MDB_txn *txn)
                        meta = env->me_metas[ mdb_env_pick_meta(env) ];
                        txn->mt_txnid = meta->mm_txnid;
                }
-               /* Setup db info */
-               txn->mt_numdbs = env->me_numdbs;
                txn->mt_txnid++;
 #if MDB_DEBUG
                if (txn->mt_txnid == mdb_debug_start)
                        mdb_debug = 1;
 #endif
-               txn->mt_flags = 0;
                txn->mt_child = NULL;
                txn->mt_loose_pgs = NULL;
                txn->mt_loose_count = 0;
@@ -2596,6 +2590,10 @@ mdb_txn_renew0(MDB_txn *txn)
        /* Moved to here to avoid a data race in read TXNs */
        txn->mt_next_pgno = meta->mm_last_pg+1;
 
+       txn->mt_flags = flags;
+
+       /* Setup db info */
+       txn->mt_numdbs = env->me_numdbs;
        for (i=2; i<txn->mt_numdbs; i++) {
                x = env->me_dbflags[i];
                txn->mt_dbs[i].md_flags = x & PERSISTENT_FLAGS;