return NULL in mi_arena_try_alloc_at if we cannot commit but commit was requested

This commit is contained in:
Daan 2025-06-08 15:36:10 -07:00
parent bea8a12d3d
commit 25fdd50666

View file

@ -216,9 +216,11 @@ static mi_decl_noinline void* mi_arena_try_alloc_at(
// now actually commit // now actually commit
bool commit_zero = false; bool commit_zero = false;
if (!_mi_os_commit_ex(p, mi_size_of_slices(slice_count), &commit_zero, mi_size_of_slices(slice_count - already_committed_count))) { if (!_mi_os_commit_ex(p, mi_size_of_slices(slice_count), &commit_zero, mi_size_of_slices(slice_count - already_committed_count))) {
memid->initially_committed = false; // if the commit fails, roll back and return NULL
_mi_arenas_free(p, mi_size_of_slices(slice_count), *memid); // this will decommit as well (if partially committed)
return NULL;
} }
else {
// committed // committed
if (commit_zero) { memid->initially_zero = true; } if (commit_zero) { memid->initially_zero = true; }
#if MI_DEBUG > 1 #if MI_DEBUG > 1
@ -230,7 +232,6 @@ static mi_decl_noinline void* mi_arena_try_alloc_at(
} }
#endif #endif
} }
}
else { else {
// already fully commited. // already fully commited.
// if the OS has overcommit, and this is the first time we access these pages, then // if the OS has overcommit, and this is the first time we access these pages, then