From 718114f5da76a64b5d2a09131eeffdddb61cf01e Mon Sep 17 00:00:00 2001 From: PThorpe92 Date: Fri, 8 Aug 2025 11:50:16 -0400 Subject: [PATCH] Keep `free` api consistent with `try_alloc`, size instead of `pages` --- core/storage/buffer_pool.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/core/storage/buffer_pool.rs b/core/storage/buffer_pool.rs index 2f89d4878..75ba9a634 100644 --- a/core/storage/buffer_pool.rs +++ b/core/storage/buffer_pool.rs @@ -326,18 +326,14 @@ impl PoolInner { // allocations of size `page_size` are more common, so we check that arena first. if let Some(arena) = self.page_arena.as_ref() { if arena_id == arena.id { - let pages = size.div_ceil(arena.page_size); - tracing::trace!("Freeing {} pages from arena {}", pages, arena_id); - arena.free(page_idx, pages); + arena.free(page_idx, size); return; } } // check WAL frame arena if let Some(wal_arena) = self.wal_frame_arena.as_ref() { if arena_id == wal_arena.id { - let pages = size.div_ceil(wal_arena.page_size); - tracing::trace!("Freeing {} pages from WAL frame arena {}", pages, arena_id); - wal_arena.free(page_idx, pages); + wal_arena.free(page_idx, size); return; } } @@ -439,9 +435,10 @@ impl Arena { ))) } - /// Mark `count` pages starting at `page_idx` as free. - pub fn free(&self, page_idx: u32, count: usize) { + /// Mark all relevant pages that include `size` starting at `page_idx` as free. + pub fn free(&self, page_idx: u32, size: usize) { let mut bm = self.free_pages.lock(); + let count = size.div_ceil(self.page_size); turso_assert!( !bm.check_run_free(page_idx, count as u32), "must not already be marked free"