mdb_page_spill(): Fix nested txn mt_dirty_room

vmware
Hallvard Furuseth 11 years ago
parent 392be3a7c6
commit 6616034eb9
  1. 4
      libraries/liblmdb/mdb.c

@ -1530,13 +1530,13 @@ mdb_page_spill(MDB_cursor *m0, MDB_val *key, MDB_val *data)
done: done:
if (rc == 0) { if (rc == 0) {
if (txn->mt_parent) { if (txn->mt_parent) {
MDB_txn *tx2;
pgno_t pgno = dl[i].mid;
txn->mt_dirty_room = txn->mt_parent->mt_dirty_room - dl[0].mid; txn->mt_dirty_room = txn->mt_parent->mt_dirty_room - dl[0].mid;
/* dirty pages that are dirty in an ancestor don't /* dirty pages that are dirty in an ancestor don't
* count against this txn's dirty_room. * count against this txn's dirty_room.
*/ */
for (i=1; i<=dl[0].mid; i++) { for (i=1; i<=dl[0].mid; i++) {
pgno_t pgno = dl[i].mid;
MDB_txn *tx2;
for (tx2 = txn->mt_parent; tx2; tx2 = tx2->mt_parent) { for (tx2 = txn->mt_parent; tx2; tx2 = tx2->mt_parent) {
j = mdb_mid2l_search(tx2->mt_u.dirty_list, pgno); j = mdb_mid2l_search(tx2->mt_u.dirty_list, pgno);
if (j <= tx2->mt_u.dirty_list[0].mid && if (j <= tx2->mt_u.dirty_list[0].mid &&

Loading…
Cancel
Save