mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-05 22:50:51 -05:00
ITS#7829 more for mdb_rebalance
Make sure to propagate rebalance results all the way back to original caller's cursor.
This commit is contained in:
parent
2764360a7b
commit
4844a72d01
1 changed files with 13 additions and 4 deletions
|
|
@ -7283,9 +7283,18 @@ mdb_page_merge(MDB_cursor *csrc, MDB_cursor *cdst)
|
|||
}
|
||||
}
|
||||
}
|
||||
mdb_cursor_pop(csrc);
|
||||
|
||||
return mdb_rebalance(csrc);
|
||||
{
|
||||
unsigned int snum = cdst->mc_snum;
|
||||
uint16_t depth = cdst->mc_db->md_depth;
|
||||
mdb_cursor_pop(cdst);
|
||||
rc = mdb_rebalance(cdst);
|
||||
/* Did the tree shrink? */
|
||||
if (depth > cdst->mc_db->md_depth)
|
||||
snum--;
|
||||
cdst->mc_snum = snum;
|
||||
cdst->mc_top = snum-1;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
/** Copy the contents of a cursor.
|
||||
|
|
@ -7474,7 +7483,7 @@ mdb_rebalance(MDB_cursor *mc)
|
|||
oldki += NUMKEYS(mn.mc_pg[mn.mc_top]);
|
||||
mn.mc_ki[mn.mc_top] += mc->mc_ki[mn.mc_top] + 1;
|
||||
rc = mdb_page_merge(mc, &mn);
|
||||
mc->mc_pg[mc->mc_top] = mn.mc_pg[mn.mc_top];
|
||||
mdb_cursor_copy(&mn, mc);
|
||||
}
|
||||
mc->mc_flags &= ~C_EOF;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue