From 9d821c26c3023b1efe3270cf8a8ce5eca111189f Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 3 Sep 2011 20:11:07 -0700 Subject: [PATCH] Fix mdb_split, fix MDB_GET_BOTH --- libraries/libmdb/mdb.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 5785227f64..431d1af5ae 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -2580,6 +2580,7 @@ set2: int ex2, *ex2p; if (op == MDB_GET_BOTH) { ex2p = &ex2; + ex2 = 0; } else { ex2p = NULL; } @@ -3662,34 +3663,32 @@ mdb_split(MDB_txn *txn, MDB_dbi dbi, MDB_page **mpp, unsigned int *newindxp, /* Maximum free space in an empty page */ pmax = txn->mt_env->me_psize - PAGEHDRSZ; nsize = mdb_leaf_size(txn->mt_env, newkey, newdata); - if (newindx <= split_indx) { -split1: + if (newindx < split_indx) { psize = nsize; for (i=0; ip, i); - psize += NODESIZE + NODEKSZ(node); + psize += NODESIZE + NODEKSZ(node) + sizeof(indx_t); if (F_ISSET(node->mn_flags, F_BIGDATA)) psize += sizeof(pgno_t); else psize += NODEDSZ(node); if (psize > pmax) { - split_indx--; - goto split1; + split_indx = i; + break; } } } else { -split2: psize = nsize; - for (i=split_indx; i=split_indx; i--) { node = NODEPTR(&mdp->p, i); - psize += NODESIZE + NODEKSZ(node); + psize += NODESIZE + NODEKSZ(node) + sizeof(indx_t); if (F_ISSET(node->mn_flags, F_BIGDATA)) psize += sizeof(pgno_t); else psize += NODEDSZ(node); if (psize > pmax) { - split_indx++; - goto split2; + split_indx = i+1; + break; } } } -- 2.39.5