From: Ivan Maidanski Date: Mon, 4 Dec 2017 20:28:01 +0000 (+0300) Subject: Fix AO_malloc for sizes near CHUNK_SIZE X-Git-Tag: v7.6.2~38 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=00bdd889702fe6dea13b835c7f633bc0d36f88bf;p=libatomic_ops Fix AO_malloc for sizes near CHUNK_SIZE Without this patch, e.g an object of CHUNK_SIZE is treated as non-large in AO_malloc but freed by AO_free_large (incorrectly). * src/atomic_ops_malloc.c (AO_malloc): Call AO_malloc_large() also for size values in range CHUNK_SIZE-sizeof(AO_t)+1 .. CHUNK_SIZE. --- diff --git a/src/atomic_ops_malloc.c b/src/atomic_ops_malloc.c index 30703ab..2a69dbc 100644 --- a/src/atomic_ops_malloc.c +++ b/src/atomic_ops_malloc.c @@ -300,7 +300,7 @@ AO_malloc(size_t sz) AO_t *result; unsigned log_sz; - if (sz > CHUNK_SIZE) + if (sz > CHUNK_SIZE - sizeof(AO_t)) return AO_malloc_large(sz); log_sz = msb(sz + (sizeof(AO_t) - 1)); result = AO_stack_pop(AO_free_list+log_sz);