summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/atomic_ops_malloc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/atomic_ops_malloc.c b/src/atomic_ops_malloc.c
index 6d4d81a..3f1881b 100644
--- a/src/atomic_ops_malloc.c
+++ b/src/atomic_ops_malloc.c
@@ -304,11 +304,13 @@ AO_malloc(size_t sz)
void
AO_free(void *p)
{
- char *base = (char *)p - sizeof(AO_t);
+ AO_t *base;
int log_sz;
if (0 == p) return;
- log_sz = (int)(*(AO_t *)base);
+
+ base = (AO_t *)p - 1;
+ log_sz = (int)(*base);
# ifdef AO_TRACE_MALLOC
fprintf(stderr, "%x: AO_free(%p sz:%lu)\n", (int)pthread_self(), p,
(unsigned long)(log_sz > LOG_MAX_SIZE? log_sz : (1 << log_sz)));
@@ -316,5 +318,5 @@ AO_free(void *p)
if (log_sz > LOG_MAX_SIZE)
AO_free_large(p);
else
- AO_stack_push(AO_free_list+log_sz, (AO_t *)base);
+ AO_stack_push(AO_free_list + log_sz, base);
}