Still need to deal with the list of mapped pages getting full.
+#ifdef VL32
+ {
+ MDB_ID2L rl = mc->mc_txn->mt_rpages;
+ unsigned x = mdb_mid2l_search(rl, mp->mp_pgno);
+ if (x <= rl[0].mid && rl[x].mid == mp->mp_pgno) {
+ munmap(mp, mc->mc_txn->mt_env->me_psize);
+ while (x < rl[0].mid) {
+ rl[x] = rl[x+1];
+ x++;
+ }
+ rl[0].mid--;
+ }
+ }
+#endif
if ((txn->mt_flags & MDB_TXN_RDONLY) && txn->mt_u.reader)
txn->mt_u.reader->mr_pid = 0;
if ((txn->mt_flags & MDB_TXN_RDONLY) && txn->mt_u.reader)
txn->mt_u.reader->mr_pid = 0;
- if (txn != txn->mt_env->me_txn0)
+ if (txn != txn->mt_env->me_txn0) {
+#ifdef VL32
+ free(txn->mt_rpages);
+#endif
}
/** Save the freelist as of this transaction to the freeDB.
}
/** Save the freelist as of this transaction to the freeDB.
p = txn->mt_rpages[x].mptr;
goto done;
}
p = txn->mt_rpages[x].mptr;
goto done;
}
+ if (txn->mt_rpages[0].mid >= MDB_IDL_UM_MAX) {
+ /* unmap some other page */
+ mdb_tassert(txn, 0);
+ }
if (txn->mt_rpages[0].mid < MDB_IDL_UM_SIZE) {
MDB_ID2 id2;
size_t len = env->me_psize;
if (txn->mt_rpages[0].mid < MDB_IDL_UM_SIZE) {
MDB_ID2 id2;
size_t len = env->me_psize;
return MDB_NOTFOUND; /* root has no siblings */
}
return MDB_NOTFOUND; /* root has no siblings */
}
+#ifdef VL32
+ mp = mc->mc_pg[mc->mc_top];
+ {
+ MDB_ID2L rl = mc->mc_txn->mt_rpages;
+ unsigned x = mdb_mid2l_search(rl, mp->mp_pgno);
+ if (x <= rl[0].mid && rl[x].mid == mp->mp_pgno) {
+ munmap(mp, mc->mc_txn->mt_env->me_psize);
+ while (x < rl[0].mid) {
+ rl[x] = rl[x+1];
+ x++;
+ }
+ rl[0].mid--;
+ }
+ }
+#endif
mdb_cursor_pop(mc);
DPRINTF(("parent page is page %"Z"u, index %u",
mc->mc_pg[mc->mc_top]->mp_pgno, mc->mc_ki[mc->mc_top]));
mdb_cursor_pop(mc);
DPRINTF(("parent page is page %"Z"u, index %u",
mc->mc_pg[mc->mc_top]->mp_pgno, mc->mc_ki[mc->mc_top]));
* limiting factors: sizeof(ID), thread stack size
*/
#ifdef VL32
* limiting factors: sizeof(ID), thread stack size
*/
#ifdef VL32
-#define MDB_IDL_LOGN 10 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */
+#define MDB_IDL_LOGN 10 /* DB_SIZE is 2^10, UM_SIZE is 2^11 */
#else
#define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */
#endif
#else
#define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */
#endif