summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2017-12-04 23:28:01 +0300
committerIvan Maidanski <ivmai@mail.ru>2017-12-11 11:03:46 +0300
commit84d15fea828ab4b2bf16a957c1c953e23a7bc924 (patch)
tree24018ec96588b720787292aa01df27f405133ee3
parenta02c06b80712cff70eb668e4872b40794275deaf (diff)
downloadlibatomic_ops-84d15fea828ab4b2bf16a957c1c953e23a7bc924.tar.gz
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.
-rw-r--r--src/atomic_ops_malloc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/atomic_ops_malloc.c b/src/atomic_ops_malloc.c
index c400c03..297b349 100644
--- a/src/atomic_ops_malloc.c
+++ b/src/atomic_ops_malloc.c
@@ -285,7 +285,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);