@@ -1327,7 +1327,7 @@ static int mdb_node_add(MDB_cursor *mc, indx_t indx,
1327
1327
MDB_val * key , MDB_val * data , pgno_t pgno , unsigned int flags );
1328
1328
static void mdb_node_del (MDB_cursor * mc , int ksize );
1329
1329
static void mdb_node_shrink (MDB_page * mp , indx_t indx );
1330
- static int mdb_node_move (MDB_cursor * csrc , MDB_cursor * cdst );
1330
+ static int mdb_node_move (MDB_cursor * csrc , MDB_cursor * cdst , int fromleft );
1331
1331
static int mdb_node_read (MDB_txn * txn , MDB_node * leaf , MDB_val * data );
1332
1332
static size_t mdb_leaf_size (MDB_env * env , MDB_val * key , MDB_val * data );
1333
1333
static size_t mdb_branch_size (MDB_env * env , MDB_val * key );
@@ -7526,7 +7526,7 @@ mdb_cursor_copy(const MDB_cursor *csrc, MDB_cursor *cdst);
7526
7526
/** Move a node from csrc to cdst.
7527
7527
*/
7528
7528
static int
7529
- mdb_node_move (MDB_cursor * csrc , MDB_cursor * cdst )
7529
+ mdb_node_move (MDB_cursor * csrc , MDB_cursor * cdst , int fromleft )
7530
7530
{
7531
7531
MDB_node * srcnode ;
7532
7532
MDB_val key , data ;
@@ -7628,7 +7628,7 @@ mdb_node_move(MDB_cursor *csrc, MDB_cursor *cdst)
7628
7628
7629
7629
mps = csrc -> mc_pg [csrc -> mc_top ];
7630
7630
/* If we're adding on the left, bump others up */
7631
- if (! cdst -> mc_ki [ csrc -> mc_top ] ) {
7631
+ if (fromleft ) {
7632
7632
mpd = cdst -> mc_pg [csrc -> mc_top ];
7633
7633
for (m2 = csrc -> mc_txn -> mt_cursors [dbi ]; m2 ; m2 = m2 -> mc_next ) {
7634
7634
if (csrc -> mc_flags & C_SUB )
@@ -7910,7 +7910,7 @@ static int
7910
7910
mdb_rebalance (MDB_cursor * mc )
7911
7911
{
7912
7912
MDB_node * node ;
7913
- int rc ;
7913
+ int rc , fromleft ;
7914
7914
unsigned int ptop , minkeys , thresh ;
7915
7915
MDB_cursor mn ;
7916
7916
indx_t oldki ;
@@ -8043,6 +8043,7 @@ mdb_rebalance(MDB_cursor *mc)
8043
8043
return rc ;
8044
8044
mn .mc_ki [mn .mc_top ] = 0 ;
8045
8045
mc -> mc_ki [mc -> mc_top ] = NUMKEYS (mc -> mc_pg [mc -> mc_top ]);
8046
+ fromleft = 0 ;
8046
8047
} else {
8047
8048
/* There is at least one neighbor to the left.
8048
8049
*/
@@ -8054,6 +8055,7 @@ mdb_rebalance(MDB_cursor *mc)
8054
8055
return rc ;
8055
8056
mn .mc_ki [mn .mc_top ] = NUMKEYS (mn .mc_pg [mn .mc_top ]) - 1 ;
8056
8057
mc -> mc_ki [mc -> mc_top ] = 0 ;
8058
+ fromleft = 1 ;
8057
8059
}
8058
8060
8059
8061
DPRINTF (("found neighbor page %" Z "u (%u keys, %.1f%% full)" ,
@@ -8065,13 +8067,13 @@ mdb_rebalance(MDB_cursor *mc)
8065
8067
* (A branch page must never have less than 2 keys.)
8066
8068
*/
8067
8069
if (PAGEFILL (mc -> mc_txn -> mt_env , mn .mc_pg [mn .mc_top ]) >= thresh && NUMKEYS (mn .mc_pg [mn .mc_top ]) > minkeys ) {
8068
- rc = mdb_node_move (& mn , mc );
8069
- if (! mc -> mc_ki [ mc -> mc_top ] ) {
8070
+ rc = mdb_node_move (& mn , mc , fromleft );
8071
+ if (fromleft ) {
8070
8072
/* if we inserted on left, bump position up */
8071
8073
oldki ++ ;
8072
8074
}
8073
8075
} else {
8074
- if (mc -> mc_ki [ ptop ] == 0 ) {
8076
+ if (! fromleft ) {
8075
8077
rc = mdb_page_merge (& mn , mc );
8076
8078
} else {
8077
8079
MDB_cursor dummy ;
0 commit comments