summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-08-28 02:11:00 +0900
committerYukihiro Matsumoto <[email protected]>2012-08-28 02:11:00 +0900
commitd04a7ec632731f81c7230af1c6fbb260d3742d33 (patch)
tree8c722a941ed975907ffbbc204927dad96746b58d /src
parent376266959f154a6646457ce85c559fe9d81145d8 (diff)
downloadmruby-d04a7ec632731f81c7230af1c6fbb260d3742d33.tar.gz
mruby-d04a7ec632731f81c7230af1c6fbb260d3742d33.zip
free heap pages from mrb_close()
Diffstat (limited to 'src')
-rw-r--r--src/gc.c13
-rw-r--r--src/state.c2
2 files changed, 15 insertions, 0 deletions
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);
}