From: Howard Chu Date: Mon, 5 Sep 2011 22:19:41 +0000 (-0700) Subject: Merge remote branch 'mdb/mdb.master' X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ffdf3d7afb53fff22ce60b7c25d0430e2da1c1e8;p=openldap Merge remote branch 'mdb/mdb.master' --- ffdf3d7afb53fff22ce60b7c25d0430e2da1c1e8 diff --cc libraries/libmdb/mdb.c index 27f2387de2,bf09af860c..73d3eaa290 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@@ -2560,19 -2566,30 +2566,43 @@@ set1 MDB_SET_KEY(leaf, &nodekey); } rc = cursor->mc_txn->mt_dbxs[cursor->mc_dbi].md_cmp(key, &nodekey); + if (rc == 0) { + /* last node was the one we wanted */ + top->mp_ki = NUMKEYS(top->mp_page)-1; + goto set1; + } + if (rc < 0) { + /* This is definitely the right page, skip search_page */ + mpp.mp_page = top->mp_page; + rc = 0; + goto set2; + } ++ rc = cursor->mc_txn->mt_dbxs[cursor->mc_dbi].md_cmp(key, &nodekey); + if (rc <= 0) goto set1; + } + /* If any parents have right-sibs, search. + * Otherwise, there's nothing further. + */ + for (i=0; imc_snum-1; i++) + if (cursor->mc_stack[i].mp_ki < + NUMKEYS(cursor->mc_stack[i].mp_page)-1) + break; + if (i == cursor->mc_snum - 1) { + /* There are no other pages */ + goto set1; } + /* If any parents have right-sibs, search. + * Otherwise, there's nothing further. + */ + for (i=0; imc_snum-1; i++) + if (cursor->mc_stack[i].mp_ki < + NUMKEYS(cursor->mc_stack[i].mp_page)-1) + break; + if (i == cursor->mc_snum - 1) { + /* There are no other pages */ + top->mp_ki = NUMKEYS(top->mp_page); + return MDB_NOTFOUND; + } } }