From ae83e02c68385c9d99b875c83115041cb09f1a1e Mon Sep 17 00:00:00 2001 From: anshika_gupta Date: Mon, 9 Mar 2026 06:15:48 +0530 Subject: [PATCH] Added mi_visit_blocks to visit all blocks of all heaps in a thread --- include/mimalloc.h | 3 +++ src/heap.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/mimalloc.h b/include/mimalloc.h index 174d9a34c..42f7a3bca 100644 --- a/include/mimalloc.h +++ b/include/mimalloc.h @@ -287,6 +287,9 @@ typedef bool (mi_cdecl mi_block_visit_fun)(const mi_heap_t* heap, const mi_heap_ mi_decl_export bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_blocks, mi_block_visit_fun* visitor, void* arg); +//Visiting all blocks of all heaps in a thread +mi_decl_export bool mi_visit_blocks(const mi_heap_t* heap ,bool visit_blocks, mi_block_visit_fun* visitor, void* arg); + // Experimental mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept; mi_decl_nodiscard mi_decl_export bool mi_is_redirected(void) mi_attr_noexcept; diff --git a/src/heap.c b/src/heap.c index 88969311e..54d9a980d 100644 --- a/src/heap.c +++ b/src/heap.c @@ -735,3 +735,19 @@ bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_blocks, mi_block_vis mi_visit_blocks_args_t args = { visit_blocks, visitor, arg }; return mi_heap_visit_areas(heap, &mi_heap_area_visitor, &args); } + +//Visiting all blocks of all heaps in a thread +bool mi_visit_blocks(const mi_heap_t* heap, bool visit_blocks, mi_block_visit_fun* visitor, void* arg) { + mi_assert_internal(heap != NULL); + if (heap == NULL) return false; + mi_heap_t* curr = heap->tld->heaps; + while (curr != NULL) { + mi_heap_t* next = curr->next; + if(!mi_heap_visit_blocks(curr, visit_blocks, visitor, arg)){ + return false; + } + curr = next; + } + return true; +} +