ITS#7623 Clear P_SUBP on conversion from fake page

vmware
Howard Chu 12 years ago committed by Hallvard Furuseth
parent 60086c1bc7
commit 1d94ea5b55
  1. 5
      libraries/liblmdb/mdb.c

@ -5189,6 +5189,7 @@ more:
MDB_page *mp; MDB_page *mp;
unsigned int offset; unsigned int offset;
unsigned int i; unsigned int i;
uint16_t fp_flags;
fp = NODEDATA(leaf); fp = NODEDATA(leaf);
if (flags == MDB_CURRENT) { if (flags == MDB_CURRENT) {
@ -5208,6 +5209,7 @@ reuse:
offset = NODESIZE + sizeof(indx_t) + data->mv_size; offset = NODESIZE + sizeof(indx_t) + data->mv_size;
} }
offset += offset & 1; offset += offset & 1;
fp_flags = fp->mp_flags;
if (NODESIZE + sizeof(indx_t) + NODEKSZ(leaf) + NODEDSZ(leaf) + if (NODESIZE + sizeof(indx_t) + NODEKSZ(leaf) + NODEDSZ(leaf) +
offset >= mc->mc_txn->mt_env->me_nodemax) { offset >= mc->mc_txn->mt_env->me_nodemax) {
/* yes, convert it */ /* yes, convert it */
@ -5231,6 +5233,7 @@ reuse:
offset = mc->mc_txn->mt_env->me_psize - NODEDSZ(leaf); offset = mc->mc_txn->mt_env->me_psize - NODEDSZ(leaf);
flags |= F_DUPDATA|F_SUBDATA; flags |= F_DUPDATA|F_SUBDATA;
dummy.md_root = mp->mp_pgno; dummy.md_root = mp->mp_pgno;
fp_flags &= ~P_SUBP;
} else { } else {
/* no, just grow it */ /* no, just grow it */
rdata = &xdata; rdata = &xdata;
@ -5240,7 +5243,7 @@ reuse:
mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno; mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno;
flags |= F_DUPDATA; flags |= F_DUPDATA;
} }
mp->mp_flags = fp->mp_flags | P_DIRTY; mp->mp_flags = fp_flags | P_DIRTY;
mp->mp_pad = fp->mp_pad; mp->mp_pad = fp->mp_pad;
mp->mp_lower = fp->mp_lower; mp->mp_lower = fp->mp_lower;
mp->mp_upper = fp->mp_upper + offset; mp->mp_upper = fp->mp_upper + offset;

Loading…
Cancel
Save