From 0fc2a8e2730eb9f2690617cae0a27a8688ca395c Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Thu, 16 Jul 2015 15:41:43 +0900 Subject: [PATCH] change heap_free prototype --- extlib/benz/gc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/extlib/benz/gc.c b/extlib/benz/gc.c index c441b90e..b1694df6 100644 --- a/extlib/benz/gc.c +++ b/extlib/benz/gc.c @@ -184,11 +184,14 @@ heap_alloc(pic_state *pic, size_t size) } static void -heap_free(pic_state *pic, union header *bp) +heap_free(pic_state *pic, void *ap) { - union header *freep, *p; + union header *freep, *bp, *p; + + assert(ap != NULL); + + bp = (union header *)ap - 1; - assert(bp != NULL); assert(bp->s.size > 1); freep = pic->heap->freep; @@ -225,7 +228,7 @@ heap_morecore(pic_state *pic) up = pic_malloc(pic, (1 + nu + 1) * sizeof(union header)); up->s.size = nu + 1; - heap_free(pic, up); + heap_free(pic, up + 1); np = up + 1; np->s.size = nu; @@ -740,7 +743,7 @@ gc_sweep_page(pic_state *pic, struct heap_page *page) while (s != NULL) { t = s->s.ptr; gc_finalize_object(pic, (struct pic_object *)(s + 1)); - heap_free(pic, s); + heap_free(pic, s + 1); s = t; } }