From 1feb83f1dc1f7e95b850c6334a22b98bde3ba431 Mon Sep 17 00:00:00 2001 From: shchmue Date: Fri, 25 Oct 2019 22:01:23 -0600 Subject: [PATCH] heap: Fix calloc memset, end node max size on free --- source/mem/heap.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/mem/heap.c b/source/mem/heap.c index fd46c16..5efdbc2 100644 --- a/source/mem/heap.c +++ b/source/mem/heap.c @@ -83,7 +83,7 @@ static void _heap_free(heap_t *heap, u32 addr) hnode_t *node = (hnode_t *)(addr - sizeof(hnode_t)); node->used = 0; node = heap->first; - while (node) + while (1) { if (!node->used) { @@ -95,7 +95,14 @@ static void _heap_free(heap_t *heap, u32 addr) node->next->prev = node->prev; } } - node = node->next; + if (node->next) + node = node->next; + else + { + node->size = -1; + break; + } + } } @@ -114,7 +121,7 @@ void *malloc(u32 size) void *calloc(u32 num, u32 size) { void *res = (void *)_heap_alloc(&_heap, num * size, sizeof(hnode_t)); - memset(res, 0, num * size); + memset(res, 0, ALIGN(num * size, sizeof(hnode_t))); return res; }