]> git.sur5r.net Git - openldap/commitdiff
ITS#7553 deinit cursor after deleting last node
authorHoward Chu <hyc@symas.com>
Mon, 25 Mar 2013 19:15:53 +0000 (12:15 -0700)
committerHoward Chu <hyc@symas.com>
Mon, 25 Mar 2013 19:15:53 +0000 (12:15 -0700)
libraries/liblmdb/mdb.c

index 3329565893e011d09730920621fe69b3da8dc064..ec003b759d99d98e27357fb51cf255765f0a36eb 100644 (file)
@@ -6403,7 +6403,7 @@ mdb_rebalance(MDB_cursor *mc)
 static int
 mdb_cursor_del0(MDB_cursor *mc, MDB_node *leaf)
 {
-       int rc;
+       int rc, eof;
 
        /* add overflow pages to free list */
        if (!IS_LEAF2(mc->mc_pg[mc->mc_top]) && F_ISSET(leaf->mn_flags, F_BIGDATA)) {
@@ -6421,9 +6421,12 @@ mdb_cursor_del0(MDB_cursor *mc, MDB_node *leaf)
        }
        mdb_node_del(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top], mc->mc_db->md_pad);
        mc->mc_db->md_entries--;
+       eof = mc->mc_flags & C_EOF;
        rc = mdb_rebalance(mc);
        if (rc != MDB_SUCCESS)
                mc->mc_txn->mt_flags |= MDB_TXN_ERROR;
+       else if (eof)
+               mc->mc_flags &= ~C_INITIALIZED;
 
        return rc;
 }