From 8f5449d2715c66f67a2d3fb2c3f0800ce59ced9a Mon Sep 17 00:00:00 2001 From: Daan Date: Mon, 9 Dec 2024 15:39:15 -0800 Subject: [PATCH] various fixes for test pipeline --- src/alloc-aligned.c | 4 ++-- src/alloc.c | 7 +++---- src/free.c | 2 +- src/page.c | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/alloc-aligned.c b/src/alloc-aligned.c index b1e6329c..4b142a1e 100644 --- a/src/alloc-aligned.c +++ b/src/alloc-aligned.c @@ -29,7 +29,7 @@ static mi_decl_restrict void* mi_heap_malloc_guarded_aligned(mi_heap_t* heap, si mi_assert_internal(alignment > 0 && alignment < MI_BLOCK_ALIGNMENT_MAX); const size_t oversize = size + alignment - 1; void* base = _mi_heap_malloc_guarded(heap, oversize, zero); - void* p = mi_align_up_ptr(base, alignment); + void* p = _mi_align_up_ptr(base, alignment); mi_track_align(base, p, (uint8_t*)p - (uint8_t*)base, size); mi_assert_internal(mi_usable_size(p) >= size); mi_assert_internal(_mi_is_aligned(p, alignment)); @@ -175,7 +175,7 @@ static void* mi_heap_malloc_zero_aligned_at(mi_heap_t* const heap, const size_t } #if MI_GUARDED - if (offset==0 && alignment < MI_BLOCK_ALIGNMENT_MAX && mi_heap_malloc_use_guarded(heap,size)) { + if (offset==0 && alignment < MI_PAGE_MAX_OVERALLOC_ALIGN && mi_heap_malloc_use_guarded(heap,size)) { return mi_heap_malloc_guarded_aligned(heap, size, alignment, zero); } #endif diff --git a/src/alloc.c b/src/alloc.c index 840d34fe..b0c89e65 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -619,7 +619,6 @@ static void* mi_block_ptr_set_guarded(mi_block_t* block, size_t obj_size) { block->next = MI_BLOCK_TAG_GUARDED; // set guard page at the end of the block - mi_segment_t* const segment = _mi_page_segment(page); const size_t block_size = mi_page_block_size(page); // must use `block_size` to match `mi_free_local` const size_t os_page_size = _mi_os_page_size(); mi_assert_internal(block_size >= obj_size + os_page_size + sizeof(mi_block_t)); @@ -630,7 +629,7 @@ static void* mi_block_ptr_set_guarded(mi_block_t* block, size_t obj_size) { } uint8_t* guard_page = (uint8_t*)block + block_size - os_page_size; mi_assert_internal(_mi_is_aligned(guard_page, os_page_size)); - if (segment->allow_decommit && _mi_is_aligned(guard_page, os_page_size)) { + if (!page->memid.is_pinned && _mi_is_aligned(guard_page, os_page_size)) { _mi_os_protect(guard_page, os_page_size); } else { @@ -640,9 +639,9 @@ static void* mi_block_ptr_set_guarded(mi_block_t* block, size_t obj_size) { // align pointer just in front of the guard page size_t offset = block_size - os_page_size - obj_size; mi_assert_internal(offset > sizeof(mi_block_t)); - if (offset > MI_BLOCK_ALIGNMENT_MAX) { + if (offset > MI_PAGE_MAX_OVERALLOC_ALIGN) { // give up to place it right in front of the guard page if the offset is too large for unalignment - offset = MI_BLOCK_ALIGNMENT_MAX; + offset = MI_PAGE_MAX_OVERALLOC_ALIGN; } void* p = (uint8_t*)block + offset; mi_track_align(block, p, offset, obj_size); diff --git a/src/free.c b/src/free.c index 0da0332e..49bf8bf6 100644 --- a/src/free.c +++ b/src/free.c @@ -519,7 +519,7 @@ static void mi_block_unguard(mi_page_t* page, mi_block_t* block, void* p) { const size_t bsize = mi_page_block_size(page); const size_t psize = _mi_os_page_size(); mi_assert_internal(bsize > psize); - mi_assert_internal(_mi_page_segment(page)->allow_decommit); + mi_assert_internal(!page->memid.is_pinned); void* gpage = (uint8_t*)block + bsize - psize; mi_assert_internal(_mi_is_aligned(gpage, psize)); _mi_os_unprotect(gpage, psize); diff --git a/src/page.c b/src/page.c index f21bf91f..98319e53 100644 --- a/src/page.c +++ b/src/page.c @@ -756,7 +756,7 @@ static inline mi_page_t* mi_find_free_page(mi_heap_t* heap, size_t size) { if (page != NULL) { #if (MI_SECURE>=3) // in secure mode, we extend half the time to increase randomness if (page->capacity < page->reserved && ((_mi_heap_random_next(heap) & 1) == 1)) { - mi_page_extend_free(heap, page, heap->tld); + mi_page_extend_free(heap, page); mi_assert_internal(mi_page_immediate_available(page)); } else