diff --git a/src/gc.c b/src/gc.c index b2316f581..54dc9cf39 100644 --- a/src/gc.c +++ b/src/gc.c @@ -491,7 +491,10 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls) } mrb_heap_page *page = gc->heaps; - struct RBasic *p = NULL; + if (page == NULL) { + add_heap(mrb, gc); + page = gc->heaps; + } while (page->freelist == NULL) { page = page->next; if (page == NULL) { @@ -499,7 +502,7 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls) page = gc->heaps; } } - p = page->freelist; + struct RBasic *p = page->freelist; page->freelist = ((struct free_obj*)p)->next; gc->live++;