From ba154c03871fd7c860d6fc981d35a183fefad028 Mon Sep 17 00:00:00 2001 From: Andrey Turkin Date: Mon, 15 Jul 2024 03:56:51 +0300 Subject: [PATCH] Fix a debug-build assertion A range of usable memory could be small enough not to have any MAX_ORDER sized frames. --- src/memory/mod.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/memory/mod.rs b/src/memory/mod.rs index e0e7411109..cec9219fe9 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -645,6 +645,9 @@ fn init_sections(mut allocator: BumpAllocator) { for order in 0..=MAX_ORDER { let pages_for_current_order = 1 << order; + debug_assert_eq!(frames.len() % pages_for_current_order, 0); + debug_assert!(base.is_aligned_to_order(order)); + if !frames.is_empty() && order != MAX_ORDER && !base.is_aligned_to_order(order + 1) { frames[0].next.store(order as usize, Ordering::Relaxed); // The first section page is not aligned to the next order size. @@ -672,11 +675,15 @@ fn init_sections(mut allocator: BumpAllocator) { //log::info!("ORDER {order}: LAST {final_page:?}"); append_page(final_page, &frames[off], order); - frames = &frames[..frames.len() - pages_for_current_order]; + frames = &frames[..off]; } else { //log::info!("ORDER {order}: LAST SKIP"); } + if frames.is_empty() { + break; + } + if order == MAX_ORDER { debug_assert_eq!(frames.len() % pages_for_current_order, 0); debug_assert!(base.is_aligned_to_order(MAX_ORDER));