]> 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 16:00:01 +0000 (16:00 +0000)
libraries/liblmdb/mdb.c

index 7b5e099534b824e5c628f5b2ddf7b978fa5ec00c..e9c2c9f298cc3f16e79564e1f147810c79879e47 100644 (file)
@@ -8658,7 +8658,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;
@@ -8700,6 +8700,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;
@@ -8711,7 +8712,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