[syslinux:master] Make __free_tagged actually free memory

syslinux-bot for Sebastian Herbszt herbszt at gmx.de
Tue Jul 27 10:15:26 PDT 2010


Commit-ID:  5eb4ed5ce84c1dce191fe4f83b58601c1e506479
Gitweb:     http://syslinux.zytor.com/commit/5eb4ed5ce84c1dce191fe4f83b58601c1e506479
Author:     Sebastian Herbszt <herbszt at gmx.de>
AuthorDate: Tue, 27 Jul 2010 14:46:57 +0200
Committer:  H. Peter Anvin <hpa at zytor.com>
CommitDate: Tue, 27 Jul 2010 10:13:06 -0700

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.


---
 core/mem/free.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

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);



More information about the Syslinux-commits mailing list