This is a multi-part message in MIME format. --------------010507020109080701050704 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit
Hallvard Breien Furuseth wrote: > Howard Chu writes: >> The flag is being propagated when the page grows and turns into a real page. >> Fixed by this simple patch. >> (...) >> mp->mp_flags = fp->mp_flags | P_DIRTY; >> + mp->mp_flags &= ~(P_SUBP|P_FAKE); >> mp->mp_pad = fp->mp_pad; > > This fixes test043, but breaks test046-dds: ldapexop exits with 49 > (invalidCredentials) for "Refreshing the meeting as $BJORNSDN...". > It passes without the patch. This is RE24 (4dc62839c2324b46bfd6) > or RE24 + mdb.master (60086c1bc77fafecef27). Try this instead. Currently testing it on my PC. -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/ --------------010507020109080701050704 Content-Type: text/plain; charset=UTF-8; name="dif.txt" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dif.txt" diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index c9f98cc..33642c8 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -5190,6 +5190,7 @@ more: MDB_page *mp; unsigned int offset; unsigned int i; + uint16_t fp_flags; fp = NODEDATA(leaf); if (flags == MDB_CURRENT) { @@ -5209,6 +5210,7 @@ reuse: offset = NODESIZE + sizeof(indx_t) + data->mv_size; } offset += offset & 1; + fp_flags = fp->mp_flags; if (NODESIZE + sizeof(indx_t) + NODEKSZ(leaf) + NODEDSZ(leaf) + offset >= mc->mc_txn->mt_env->me_nodemax) { /* yes, convert it */ @@ -5232,6 +5234,7 @@ reuse: offset = mc->mc_txn->mt_env->me_psize - NODEDSZ(leaf); flags |= F_DUPDATA|F_SUBDATA; dummy.md_root = mp->mp_pgno; + fp_flags &= ~(P_SUBP|P_FAKE); } else { /* no, just grow it */ rdata = &xdata; @@ -5241,7 +5244,7 @@ reuse: mp->mp_pgno = mc->mc_pg[mc->mc_top]->mp_pgno; 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_lower = fp->mp_lower; mp->mp_upper = fp->mp_upper + offset; --------------010507020109080701050704--
