]> git.sur5r.net Git - openldap/commitdiff
ITS#7511 make sure cursor is marked valid after successful put
authorHoward Chu <hyc@openldap.org>
Tue, 29 Jan 2013 02:45:36 +0000 (18:45 -0800)
committerHoward Chu <hyc@openldap.org>
Tue, 29 Jan 2013 02:45:36 +0000 (18:45 -0800)
libraries/liblmdb/mdb.c

index 0ef43d6154681b973b933e4454f14b3ffadb814c..cdd8ea104e3ce7fbde6825b1aed3f97eb0f6f862 100644 (file)
@@ -4639,7 +4639,7 @@ mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data,
 
        switch (op) {
        case MDB_GET_CURRENT:
-               if (!mc->mc_flags & C_INITIALIZED) {
+               if (!(mc->mc_flags & C_INITIALIZED)) {
                        rc = EINVAL;
                } else {
                        MDB_page *mp = mc->mc_pg[mc->mc_top];
@@ -5181,6 +5181,11 @@ put_sub:
                }
        }
 done:
+       /* If we succeeded and the key didn't exist before, make sure
+        * the cursor is marked valid.
+        */
+       if (!rc && insert)
+               mc->mc_flags |= C_INITIALIZED;
        return rc;
 }
 
@@ -5193,7 +5198,7 @@ mdb_cursor_del(MDB_cursor *mc, unsigned int flags)
        if (F_ISSET(mc->mc_txn->mt_flags, MDB_TXN_RDONLY))
                return EACCES;
 
-       if (!mc->mc_flags & C_INITIALIZED)
+       if (!(mc->mc_flags & C_INITIALIZED))
                return EINVAL;
 
        rc = mdb_cursor_touch(mc);