diff options
Diffstat (limited to 'intern')
-rw-r--r-- | intern/guardedalloc/intern/mallocn_guarded_impl.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/intern/guardedalloc/intern/mallocn_guarded_impl.c b/intern/guardedalloc/intern/mallocn_guarded_impl.c index 8ba14b3887b..ef74f394fb1 100644 --- a/intern/guardedalloc/intern/mallocn_guarded_impl.c +++ b/intern/guardedalloc/intern/mallocn_guarded_impl.c @@ -552,7 +552,13 @@ void *MEM_guarded_malloc_arrayN(size_t len, size_t size, const char *str) void *MEM_guarded_mallocN_aligned(size_t len, size_t alignment, const char *str) { - MemHead *memh; + /* We only support alignment to a power of two. */ + assert(IS_POW2(alignment)); + + /* Use a minimal alignment of 8. Otherwise MEM_guarded_freeN thinks it is an illegal pointer. */ + if (alignment < 8) { + alignment = 8; + } /* It's possible that MemHead's size is not properly aligned, * do extra padding to deal with this. @@ -567,13 +573,10 @@ void *MEM_guarded_mallocN_aligned(size_t len, size_t alignment, const char *str) */ assert(alignment < 1024); - /* We only support alignment to a power of two. */ - assert(IS_POW2(alignment)); - len = SIZET_ALIGN_4(len); - memh = (MemHead *)aligned_malloc(len + extra_padding + sizeof(MemHead) + sizeof(MemTail), - alignment); + MemHead *memh = (MemHead *)aligned_malloc( + len + extra_padding + sizeof(MemHead) + sizeof(MemTail), alignment); if (LIKELY(memh)) { /* We keep padding in the beginning of MemHead, |