mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
Refix root split check from 5da67968af
This commit is contained in:
parent
f13b971960
commit
bfe2088946
@ -8450,6 +8450,7 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
|
|||||||
/* Copy separator key to the parent.
|
/* Copy separator key to the parent.
|
||||||
*/
|
*/
|
||||||
if (SIZELEFT(mn.mc_pg[ptop]) < mdb_branch_size(env, &sepkey)) {
|
if (SIZELEFT(mn.mc_pg[ptop]) < mdb_branch_size(env, &sepkey)) {
|
||||||
|
int snum = mc->mc_snum;
|
||||||
mn.mc_snum--;
|
mn.mc_snum--;
|
||||||
mn.mc_top--;
|
mn.mc_top--;
|
||||||
did_split = 1;
|
did_split = 1;
|
||||||
@ -8458,13 +8459,7 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
|
|||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
/* root split? */
|
/* root split? */
|
||||||
if (mn.mc_snum == mc->mc_snum) {
|
if (mc->mc_snum > snum) {
|
||||||
mc->mc_pg[mc->mc_snum] = mc->mc_pg[mc->mc_top];
|
|
||||||
mc->mc_ki[mc->mc_snum] = mc->mc_ki[mc->mc_top];
|
|
||||||
mc->mc_pg[mc->mc_top] = mc->mc_pg[ptop];
|
|
||||||
mc->mc_ki[mc->mc_top] = mc->mc_ki[ptop];
|
|
||||||
mc->mc_snum++;
|
|
||||||
mc->mc_top++;
|
|
||||||
ptop++;
|
ptop++;
|
||||||
}
|
}
|
||||||
/* Right page might now have changed parent.
|
/* Right page might now have changed parent.
|
||||||
@ -8595,8 +8590,6 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
|
|||||||
continue;
|
continue;
|
||||||
if (!(m2->mc_flags & m3->mc_flags & C_INITIALIZED))
|
if (!(m2->mc_flags & m3->mc_flags & C_INITIALIZED))
|
||||||
continue;
|
continue;
|
||||||
if (m3->mc_flags & C_SPLITTING)
|
|
||||||
continue;
|
|
||||||
if (new_root) {
|
if (new_root) {
|
||||||
int k;
|
int k;
|
||||||
/* root split */
|
/* root split */
|
||||||
@ -8613,6 +8606,8 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
|
|||||||
m3->mc_snum++;
|
m3->mc_snum++;
|
||||||
m3->mc_top++;
|
m3->mc_top++;
|
||||||
}
|
}
|
||||||
|
if (m3->mc_flags & C_SPLITTING)
|
||||||
|
continue;
|
||||||
if (m3->mc_top >= mc->mc_top && m3->mc_pg[mc->mc_top] == mp) {
|
if (m3->mc_top >= mc->mc_top && m3->mc_pg[mc->mc_top] == mp) {
|
||||||
if (m3->mc_ki[mc->mc_top] >= newindx && !(nflags & MDB_SPLIT_REPLACE))
|
if (m3->mc_ki[mc->mc_top] >= newindx && !(nflags & MDB_SPLIT_REPLACE))
|
||||||
m3->mc_ki[mc->mc_top]++;
|
m3->mc_ki[mc->mc_top]++;
|
||||||
|
Loading…
Reference in New Issue
Block a user