From f11623f07554a470e5f9855459c9aefa3f48b48a Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Mon, 25 Nov 2013 00:24:03 +0900 Subject: [PATCH] add_heap_page should not be invoked in gc_alloc, but should be in obj_alloc --- src/gc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gc.c b/src/gc.c index dad338ae..72190d00 100644 --- a/src/gc.c +++ b/src/gc.c @@ -139,8 +139,7 @@ gc_alloc(pic_state *pic, size_t size) if (p->s.size >= nunits) break; if (p == freep) { - if ((p = add_heap_page(pic)) == NULL) - return NULL; + return NULL; } } if (p->s.size == nunits) { @@ -494,8 +493,11 @@ pic_obj_alloc_unsafe(pic_state *pic, size_t size, enum pic_tt tt) if (obj == NULL) { pic_gc_run(pic); obj = (struct pic_object *)gc_alloc(pic, size); - if (obj == NULL) - pic_abort(pic, "GC memory exhausted"); + if (obj == NULL) { + if (add_heap_page(pic) == NULL) + pic_abort(pic, "GC memory exhausted"); + obj = (struct pic_object *)gc_alloc(pic, size); + } } obj->tt = tt;