]> git.sur5r.net Git - openldap/commitdiff
Support mdb_txn_abort(a reset txn).
authorHallvard Furuseth <hallvard@openldap.org>
Thu, 18 Apr 2013 02:15:45 +0000 (04:15 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Thu, 18 Apr 2013 02:15:45 +0000 (04:15 +0200)
libraries/liblmdb/mdb.c

index f1ed1f232aa745a3c2d8475f67883dc318ec9217..72ffa7e587fe5df0c1e4e41f9b566108ccaa7946 100644 (file)
@@ -1980,6 +1980,7 @@ mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret)
 }
 
 /** Common code for #mdb_txn_reset() and #mdb_txn_abort().
+ * May be called twice for readonly txns: First reset it, then abort.
  * @param[in] txn the transaction handle to reset
  */
 static void
@@ -2001,7 +2002,9 @@ mdb_txn_reset0(MDB_txn *txn)
        if (F_ISSET(txn->mt_flags, MDB_TXN_RDONLY)) {
                if (txn->mt_u.reader) {
                        txn->mt_u.reader->mr_txnid = (txnid_t)-1;
+                       txn->mt_u.reader = NULL; /* do not touch mr_txnid again */
                }
+               txn->mt_numdbs = 0;     /* mark txn as reset, do not close DBs again */
        } else {
                MDB_page *dp;