From 008bec3013f6f45f0878b87b5c9530d663eda4e3 Mon Sep 17 00:00:00 2001 From: Sergiy Kuryata Date: Tue, 10 Dec 2024 16:37:24 -0800 Subject: [PATCH] Clear out small object free space in large segments Part 2 --- src/segment.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/segment.c b/src/segment.c index d3469cb8..1975dcb4 100644 --- a/src/segment.c +++ b/src/segment.c @@ -1404,6 +1404,13 @@ static bool mi_segment_check_free(mi_segment_t* segment, size_t slices_needed, s slice = slice + slice->slice_count; } + if (segment->page_kind == MI_PAGE_LARGE) { + // Clear out small object free space in large segments + size_t small_free_space_mask = mi_free_space_mask_from_blocksize(MI_SMALL_OBJ_SIZE_MAX); + small_free_space_mask = small_free_space_mask | (small_free_space_mask - 1); + free_space_mask &= ~small_free_space_mask; + } + if (free_space_mask != 0) { mi_atomic_or_acq_rel(&segment->free_space_mask, free_space_mask); }