ITS#8321 mdb_put cursor needs tracking too

mdb.RE/0.9
Howard Chu 9 years ago
parent 7881fd0fa7
commit 8e7cd2269d
  1. 9
      libraries/liblmdb/mdb.c

@ -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_ki[k+1] = m3->mc_ki[k];
m3->mc_pg[k+1] = m3->mc_pg[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; m3->mc_ki[0] = 1;
} else { } else {
m3->mc_ki[0] = 0; m3->mc_ki[0] = 0;
@ -8700,6 +8700,7 @@ mdb_put(MDB_txn *txn, MDB_dbi dbi,
{ {
MDB_cursor mc; MDB_cursor mc;
MDB_xcursor mx; MDB_xcursor mx;
int rc;
if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID)) if (!key || !data || !TXN_DBI_EXIST(txn, dbi, DB_USRVALID))
return EINVAL; 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; return (txn->mt_flags & MDB_TXN_RDONLY) ? EACCES : MDB_BAD_TXN;
mdb_cursor_init(&mc, txn, dbi, &mx); 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 #ifndef MDB_WBUF

Loading…
Cancel
Save