aboutsummaryrefslogtreecommitdiff
path: root/src/common_memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common_memory.cpp')
-rw-r--r--src/common_memory.cpp23
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: