MDB_xcursor *mx;
MDB_page *dp, *mp;
MDB_node *leaf;
- unsigned i, j;
- int rc = MDB_SUCCESS, level;
+ unsigned i, j, x;
+ int rc = MDB_SUCCESS;
/* Mark pages seen by cursors: First m0, then tracked cursors */
for (i = txn->mt_numdbs;; ) {
mark_done:
if (all) {
/* Mark dirty root pages */
+ MDB_ID2L dl = txn->mt_u.dirty_list;
for (i=0; i<txn->mt_numdbs; i++) {
if (txn->mt_dbflags[i] & DB_DIRTY) {
pgno_t pgno = txn->mt_dbs[i].md_root;
if (pgno == P_INVALID)
continue;
- if ((rc = MDB_PAGE_GET(m0, pgno, 1, &dp, &level)) != MDB_SUCCESS)
- break;
- if ((dp->mp_flags & Mask) == pflags && level <= 1)
+ x = mdb_mid2l_search(dl, pgno);
+ if (! (x <= dl[0].mid && dl[x].mid == pgno))
+ continue;
+ dp = dl[x].mptr;
+ if ((dp->mp_flags & Mask) == pflags)
dp->mp_flags ^= P_KEEP;
}
}