From: Sebastian Herbszt Date: Tue, 27 Jul 2010 12:46:57 +0000 (+0200) Subject: Make __free_tagged actually free memory X-Git-Tag: syslinux-4.03-pre1~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5eb4ed5ce84c1dce191fe4f83b58601c1e506479;p=platform%2Fupstream%2Fsyslinux.git Make __free_tagged actually free memory __free_tagged called by comboot_cleanup_lowmem (core/mem/free.c) doesn't seem to work correctly. Memory allocated with lmalloc() isn't marked as free after the allocating module exits: boot: mem lowmem_buf: 0x000353e0 boot: mem lowmem_buf: 0x000553f0 boot: mem lowmem_buf: 0x00075400 boot: mem lowmem_buf: 0x00000000 boot: The expected behaviour boot: mem lowmem_buf: 0x000353e0 boot: mem lowmem_buf: 0x000353e0 boot: mem lowmem_buf: 0x000353e0 can be achieved with the following patch. --- diff --git a/core/mem/free.c b/core/mem/free.c index 0becb9e..384f10e 100644 --- a/core/mem/free.c +++ b/core/mem/free.c @@ -136,7 +136,7 @@ static void __free_tagged(malloc_tag_t tag) { for (i = 0; i < NHEAP; i++) { dprintf("__free_tagged(%u) heap %d\n", tag, i); head = &__malloc_head[i]; - for (fp = head ; fp != head ; fp = fp->a.next) { + for (fp = head->a.next ; fp != head ; fp = fp->a.next) { if (ARENA_TYPE_GET(fp->a.attrs) == ARENA_TYPE_USED && fp->a.tag == tag) fp = __free_block(fp);