@@ -4251,7 +4251,7 @@ mdb_freelist_save(MDB_txn *txn)
42514251 unsigned end = mop_len ;
42524252 mop_len -= len ;
42534253 unsigned start = mop_len > 0 ? mop_len - 1 : 0 ;
4254- char do_write = env -> me_freelist_written_start <= end && env -> me_freelist_written_end >= start ;
4254+ char do_write = freelist_written_start <= end && freelist_written_end >= start ;
42554255 fl_writes [i ++ ] = do_write ;
42564256 // determine if it is in the range of actively written pages
42574257 if (freelist_written_start <= end && freelist_written_end >= start ) {
@@ -4303,9 +4303,11 @@ mdb_freelist_save(MDB_txn *txn)
43034303 mop [0 ] = 0 ;
43044304 }
43054305 mop_len = (mop ? mop [0 ] : 0 ) + txn -> mt_loose_count ;
4306- //fprintf(stderr, "mop_len %u = mop[0] %u + txn->mt_loose_count %u, reserved_sape,", mop_len, (mop ? mop[0] : 0), txn->mt_loose_count, reserved_space);
4307- if (freelist_written_start != env -> me_freelist_written_start )
4308- freelist_written_end = env -> me_freelist_written_end ;
4306+ if (txn -> mt_loose_count > 0 ) {
4307+ // loose pages are appended to the end, so we have to expand the range to the end
4308+ env -> me_freelist_written_end = mop_len ;
4309+ env -> me_freelist_written_start = 1 ;
4310+ }
43094311 } while (reserved_space != mop_len ||
43104312 (start_written > env -> me_freelist_start && env -> me_freelist_start > 0 ) ||
43114313 freecnt < txn -> mt_free_pgs [0 ] ||
@@ -4317,7 +4319,8 @@ mdb_freelist_save(MDB_txn *txn)
43174319 */
43184320 if (txn -> mt_loose_pgs ) {
43194321 MDB_page * mp = txn -> mt_loose_pgs ;
4320- if (!env -> me_pghead ) env -> me_pghead = mdb_midl_alloc (1 );
4322+ if (!env -> me_pghead )
4323+ env -> me_pghead = mdb_midl_alloc (1 );
43214324 unsigned count = txn -> mt_loose_count ;
43224325 lost_loose += count ;
43234326 for (; mp ; mp = NEXT_LOOSE_PAGE (mp ))
0 commit comments