mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-04 18:14:12 +08:00
mdbx: fix cursor tracking inside mdbx_rebalance().
This commit is contained in:
parent
ae708aab13
commit
36a86bbc6e
31
src/mdbx.c
31
src/mdbx.c
@ -8935,27 +8935,22 @@ static int mdbx_rebalance(MDBX_cursor *mc) {
|
|||||||
if (unlikely(rc))
|
if (unlikely(rc))
|
||||||
return rc;
|
return rc;
|
||||||
/* Adjust cursors pointing to mp */
|
/* Adjust cursors pointing to mp */
|
||||||
|
const MDBX_dbi dbi = mc->mc_dbi;
|
||||||
|
for (MDBX_cursor *m2 = mc->mc_txn->mt_cursors[dbi]; m2;
|
||||||
|
m2 = m2->mc_next) {
|
||||||
|
MDBX_cursor *m3 =
|
||||||
|
(mc->mc_flags & C_SUB) ? &m2->mc_xcursor->mx_cursor : m2;
|
||||||
|
if (!(m3->mc_flags & C_INITIALIZED) || (m3->mc_snum < mc->mc_snum))
|
||||||
|
continue;
|
||||||
|
if (m3->mc_pg[0] == mp) {
|
||||||
|
m3->mc_snum = 0;
|
||||||
|
m3->mc_top = 0;
|
||||||
|
m3->mc_flags &= ~C_INITIALIZED;
|
||||||
|
}
|
||||||
|
}
|
||||||
mc->mc_snum = 0;
|
mc->mc_snum = 0;
|
||||||
mc->mc_top = 0;
|
mc->mc_top = 0;
|
||||||
mc->mc_flags &= ~C_INITIALIZED;
|
mc->mc_flags &= ~C_INITIALIZED;
|
||||||
{
|
|
||||||
MDBX_cursor *m2, *m3;
|
|
||||||
MDBX_dbi dbi = mc->mc_dbi;
|
|
||||||
|
|
||||||
for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2 = m2->mc_next) {
|
|
||||||
if (mc->mc_flags & C_SUB)
|
|
||||||
m3 = &m2->mc_xcursor->mx_cursor;
|
|
||||||
else
|
|
||||||
m3 = m2;
|
|
||||||
if (!(m3->mc_flags & C_INITIALIZED) || (m3->mc_snum < mc->mc_snum))
|
|
||||||
continue;
|
|
||||||
if (m3->mc_pg[0] == mp) {
|
|
||||||
m3->mc_snum = 0;
|
|
||||||
m3->mc_top = 0;
|
|
||||||
m3->mc_flags &= ~C_INITIALIZED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (IS_BRANCH(mp) && NUMKEYS(mp) == 1) {
|
} else if (IS_BRANCH(mp) && NUMKEYS(mp) == 1) {
|
||||||
int i;
|
int i;
|
||||||
mdbx_debug("collapsing root page!");
|
mdbx_debug("collapsing root page!");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user