diff --git a/include/mimalloc/internal.h b/include/mimalloc/internal.h index e43d4420..d96cfa4c 100644 --- a/include/mimalloc/internal.h +++ b/include/mimalloc/internal.h @@ -790,11 +790,12 @@ static inline void mi_page_set_has_aligned(mi_page_t* page, bool has_aligned) { static inline void mi_page_set_heap(mi_page_t* page, mi_heap_t* heap) { mi_assert_internal(!mi_page_is_in_full(page)); - const mi_page_flags_t flags = mi_page_flags(page); - const mi_threadid_t tid = (heap != NULL ? heap->tld->thread_id : 0) | flags; // for MI_PAGE_HAS_ALIGNED + // only the aligned flag is retained (and in particular clear the abandoned-mapped flag). + const mi_page_flags_t flags = (mi_page_has_aligned(page) ? MI_PAGE_HAS_ALIGNED : 0); + const mi_threadid_t tid = (heap == NULL ? 0 : heap->tld->thread_id) | flags; if (heap != NULL) { page->heap = heap; - page->heap_tag = heap->tag; + page->heap_tag = heap->tag; } else { page->heap = NULL;