]> git.sur5r.net Git - openldap/commitdiff
Cleaner "Support mdb_txn_abort(a reset txn)".
authorHallvard Furuseth <hallvard@openldap.org>
Sat, 4 May 2013 08:03:19 +0000 (10:03 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Sat, 4 May 2013 08:03:19 +0000 (10:03 +0200)
Redo 8a562f560edcc6417672df453c4e626dfb4c4024 so !mt_dbxs indicates
"txn was reset", so mt_numdbs gets one magic value instead of two.

libraries/liblmdb/mdb.c

index 96ca73fb03f9c9688d43f26ab45d3144c4f8efc2..14b13822e97aa22bc89f03b0955c7820f288518d 100644 (file)
@@ -1871,7 +1871,7 @@ mdb_txn_renew(MDB_txn *txn)
 {
        int rc;
 
-       if (!txn || txn->mt_numdbs || !(txn->mt_flags & MDB_TXN_RDONLY))
+       if (!txn || txn->mt_dbxs)       /* A reset txn has mt_dbxs==NULL */
                return EINVAL;
 
        if (txn->mt_env->me_flags & MDB_FATAL_ERROR) {
@@ -2014,7 +2014,8 @@ mdb_txn_reset0(MDB_txn *txn)
                        if (!(env->me_flags & MDB_NOTLS))
                                txn->mt_u.reader = NULL; /* txn does not own reader */
                }
-               txn->mt_numdbs = 0;     /* mark txn as reset, do not close DBs again */
+               txn->mt_numdbs = 0;             /* close nothing if called again */
+               txn->mt_dbxs = NULL;    /* mark txn as reset */
        } else {
                MDB_page *dp;