diff --git a/src/os.c b/src/os.c index 0d40912a..b4b78f43 100644 --- a/src/os.c +++ b/src/os.c @@ -380,14 +380,15 @@ void* _mi_os_alloc_aligned(size_t size, size_t alignment, bool commit, bool allo mi_assert_internal(memid->mem.os.size >= size); mi_assert_internal(_mi_is_aligned(p,alignment)); - mi_assert_internal(!commit || memid->initially_committed); - mi_assert_internal(!memid->initially_zero || memid->initially_committed); + if (commit) { mi_assert_internal(memid->initially_committed); } + if (memid->initially_zero) { mi_assert_internal(memid->initially_committed); } return p; } mi_decl_nodiscard static void* mi_os_ensure_zero(void* p, size_t size, mi_memid_t* memid) { - if (p==NULL || size==0 || memid->initially_zero) return p; + if (p==NULL || size==0) return p; + // ensure committed if (!memid->initially_committed) { bool is_zero = false; if (!_mi_os_commit(p, size, &is_zero)) { @@ -396,6 +397,8 @@ mi_decl_nodiscard static void* mi_os_ensure_zero(void* p, size_t size, mi_memid_ } memid->initially_committed = true; } + // ensure zero'd + if (memid->initially_zero) return p; _mi_memzero_aligned(p,size); memid->initially_zero = true; return p;