@@ -8380,8 +8380,6 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
8380
8380
rp -> mp_lower += sizeof (indx_t );
8381
8381
rp -> mp_upper -= ksize - sizeof (indx_t );
8382
8382
mc -> mc_ki [mc -> mc_top ] = x ;
8383
- mc -> mc_pg [mc -> mc_top ] = rp ;
8384
- mc -> mc_ki [ptop ]++ ;
8385
8383
}
8386
8384
} else {
8387
8385
int psize , nsize , k ;
@@ -8582,11 +8580,6 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
8582
8580
/* reset back to original page */
8583
8581
if (newindx < split_indx ) {
8584
8582
mc -> mc_pg [mc -> mc_top ] = mp ;
8585
- if (nflags & MDB_RESERVE ) {
8586
- node = NODEPTR (mp , mc -> mc_ki [mc -> mc_top ]);
8587
- if (!(node -> mn_flags & F_BIGDATA ))
8588
- newdata -> mv_data = NODEDATA (node );
8589
- }
8590
8583
} else {
8591
8584
mc -> mc_pg [mc -> mc_top ] = rp ;
8592
8585
mc -> mc_ki [ptop ]++ ;
@@ -8600,6 +8593,25 @@ mdb_page_split(MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno
8600
8593
}
8601
8594
}
8602
8595
}
8596
+ if (nflags & MDB_RESERVE ) {
8597
+ node = NODEPTR (mc -> mc_pg [mc -> mc_top ], mc -> mc_ki [mc -> mc_top ]);
8598
+ if (!(node -> mn_flags & F_BIGDATA ))
8599
+ newdata -> mv_data = NODEDATA (node );
8600
+ }
8601
+ } else {
8602
+ if (newindx >= split_indx ) {
8603
+ mc -> mc_pg [mc -> mc_top ] = rp ;
8604
+ mc -> mc_ki [ptop ]++ ;
8605
+ /* Make sure mc_ki is still valid.
8606
+ */
8607
+ if (mn .mc_pg [ptop ] != mc -> mc_pg [ptop ] &&
8608
+ mc -> mc_ki [ptop ] >= NUMKEYS (mc -> mc_pg [ptop ])) {
8609
+ for (i = 0 ; i <=ptop ; i ++ ) {
8610
+ mc -> mc_pg [i ] = mn .mc_pg [i ];
8611
+ mc -> mc_ki [i ] = mn .mc_ki [i ];
8612
+ }
8613
+ }
8614
+ }
8603
8615
}
8604
8616
8605
8617
{
0 commit comments