diff options
Diffstat (limited to 'src/common_memory.cpp')
| -rw-r--r-- | src/common_memory.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/common_memory.cpp b/src/common_memory.cpp index 418470c19..7b4c03a41 100644 --- a/src/common_memory.cpp +++ b/src/common_memory.cpp @@ -379,10 +379,10 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { break; #else // TODO(bill): *nix version that's decent - case gbAllocation_Alloc: - posix_memalign(&ptr, alignment, size); + case gbAllocation_Alloc: { + int err = posix_memalign(&ptr, alignment, size); gb_zero_size(ptr, size); - break; + } break; case gbAllocation_Free: if (old_memory != nullptr) { @@ -390,13 +390,16 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { } break; - case gbAllocation_Resize: + case gbAllocation_Resize: { + int err = 0; if (size == 0) { free(old_memory); break; } if (old_memory == nullptr) { - posix_memalign(&ptr, alignment, size); + err = posix_memalign(&ptr, alignment, size); + GB_ASSERT_MSG(err == 0, "posix_memalign err: %d", err); + GB_ASSERT(ptr != nullptr); gb_zero_size(ptr, size); break; } @@ -405,10 +408,14 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) { break; } - posix_memalign(&ptr, alignment, size); + err = posix_memalign(&ptr, alignment, size); + GB_ASSERT_MSG(err == 0, "posix_memalign err: %d", err); + GB_ASSERT(ptr != nullptr); gb_memmove(ptr, old_memory, old_size); - gb_zero_size(cast(u8 *)ptr + old_size, gb_max(size-old_size, 0)); - break; + free(old_memory); + isize n = gb_max(size-old_size, 0); + gb_zero_size(cast(u8 *)ptr + old_size, n); + } break; #endif case gbAllocation_FreeAll: |