From: Howard Chu Date: Sun, 4 Sep 2011 03:11:07 +0000 (-0700) Subject: Fix mdb_split, fix MDB_GET_BOTH X-Git-Tag: accepted/tizen/5.0/unified/20181102.030725~1027 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9d821c26c3023b1efe3270cf8a8ce5eca111189f;p=platform%2Fupstream%2Flmdb.git Fix mdb_split, fix MDB_GET_BOTH --- diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 5785227..431d1af 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; } } }