From d04a7ec632731f81c7230af1c6fbb260d3742d33 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 28 Aug 2012 02:11:00 +0900 Subject: free heap pages from mrb_close() --- src/gc.c | 13 +++++++++++++ src/state.c | 2 ++ 2 files changed, 15 insertions(+) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index 9a45049d2..006edea8e 100644 --- a/src/gc.c +++ b/src/gc.c @@ -284,6 +284,19 @@ mrb_init_heap(mrb_state *mrb) #endif } +void +mrb_free_heap(mrb_state *mrb) +{ + struct heap_page *page = mrb->heaps; + struct heap_page *tmp; + + while (page) { + tmp = page; + page = page->next; + mrb_free(mrb, tmp); + } +} + static void gc_protect(mrb_state *mrb, struct RBasic *p) { diff --git a/src/state.c b/src/state.c index 28c495100..d17181eb8 100644 --- a/src/state.c +++ b/src/state.c @@ -51,6 +51,7 @@ mrb_open() } void mrb_free_symtbl(mrb_state *mrb); +void mrb_free_heap(mrb_state *mrb); void mrb_close(mrb_state *mrb) @@ -72,6 +73,7 @@ mrb_close(mrb_state *mrb) } mrb_free(mrb, mrb->irep); mrb_free_symtbl(mrb); + mrb_free_heap(mrb); mrb_free(mrb, mrb); } -- cgit v1.2.3