]> git.sur5r.net Git - openldap/commitdiff
ITS#8321 mdb_put cursor needs tracking too
authorHoward Chu <hyc@openldap.org>
Tue, 24 Nov 2015 01:21:05 +0000 (01:21 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 24 Nov 2015 15:17:15 +0000 (15:17 +0000)
libraries/liblmdb/mdb.c

index 5cddc3d47cfc14023b6b663e7ab836e8799fac05..4cc78ba0031a7db0cf7d74c2193f5bae3044431d 100644 (file)
@@ -8779,7 +8779,7 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
                                        m3->mc_ki[k+1] = m3->mc_ki[k];
                                        m3->mc_pg[k+1] = m3->mc_pg[k];
                                }
-                               if (m3->mc_ki[0] > nkeys) {
+                               if (m3->mc_ki[0] >= nkeys) {
                                        m3->mc_ki[0] = 1;
                                } else {
                                        m3->mc_ki[0] = 0;
@@ -8821,6 +8821,7 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi,
 {
        MDB_cursor mc;
        MDB_xcursor mx;
+       int rc;
 
        if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID))
                return EINVAL;
@@ -8832,7 +8833,11 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi,
                return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN;
 
        mdb_cursor_init(&mc, txn, dbi, &mx);
-       return mdb_cursor_put(&mc, key, data, flags);
+       mc.mc_next = txn->mt_cursors[dbi];
+       txn->mt_cursors[dbi] = &mc;
+       rc = mdb_cursor_put(&mc, key, data, flags);
+       txn->mt_cursors[dbi] = mc.mc_next;
+       return rc;
 }
 
 #ifndef MDB_WBUF