unsigned n;
mp = mc.mc_pg[mc.mc_top];
n = NUMKEYS(mp);
+
if (IS_LEAF(mp)) {
- for (i=0; i<n; i++) {
- ni = NODEPTR(mp, i);
- if (ni->mn_flags & F_BIGDATA) {
- MDB_page *omp;
- pgno_t pg;
- memcpy(&pg, NODEDATA(ni), sizeof(pg));
- rc = mdb_page_get(txn, pg, &omp, NULL);
- if (rc)
- goto done;
- if (my->mc_wlen[toggle] >= WBUF) {
+ if (!IS_LEAF2(mp)) {
+ for (i=0; i<n; i++) {
+ ni = NODEPTR(mp, i);
+ if (ni->mn_flags & F_BIGDATA) {
+ MDB_page *omp;
+ pgno_t pg;
+ memcpy(&pg, NODEDATA(ni), sizeof(pg));
+ rc = mdb_page_get(txn, pg, &omp, NULL);
+ if (rc)
+ goto done;
+ if (my->mc_wlen[toggle] >= WBUF) {
+ rc = mdb_env_cthr_toggle(my);
+ if (rc)
+ goto done;
+ toggle ^= 1;
+ }
+ mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]);
+ memcpy(mo, omp, my->mc_env->me_psize);
+ mo->mp_pgno = my->mc_next_pgno;
+ my->mc_next_pgno += omp->mp_pages;
+ my->mc_wlen[toggle] += my->mc_env->me_psize;
+ my->mc_olen[toggle] = my->mc_env->me_psize * (omp->mp_pages - 1);
+ my->mc_obuf[toggle] = (char *)omp + my->mc_env->me_psize;
rc = mdb_env_cthr_toggle(my);
if (rc)
goto done;
toggle ^= 1;
+ } else if (ni->mn_flags & F_SUBDATA) {
+ MDB_db db;
+ memcpy(&db, NODEDATA(ni), sizeof(db));
+ my->mc_toggle = toggle;
+ rc = mdb_env_cwalk(my, db.md_root);
+ if (rc)
+ goto done;
+ toggle = my->mc_toggle;
}
- mo = (MDB_page *)(my->mc_wbuf[toggle] + my->mc_wlen[toggle]);
- memcpy(mo, omp, my->mc_env->me_psize);
- mo->mp_pgno = my->mc_next_pgno;
- my->mc_next_pgno += omp->mp_pages;
- my->mc_wlen[toggle] += my->mc_env->me_psize;
- my->mc_olen[toggle] = my->mc_env->me_psize * (omp->mp_pages - 1);
- my->mc_obuf[toggle] = (char *)omp + my->mc_env->me_psize;
- rc = mdb_env_cthr_toggle(my);
- if (rc)
- goto done;
- toggle ^= 1;
- } else if (ni->mn_flags & F_SUBDATA) {
- MDB_db db;
- memcpy(&db, NODEDATA(ni), sizeof(db));
- my->mc_toggle = toggle;
- rc = mdb_env_cwalk(my, db.md_root);
- if (rc)
- goto done;
- toggle = my->mc_toggle;
}
}
} else {