summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gc.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/gc.c b/src/gc.c
index 6e3ba1d0e..375bbfd22 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1168,6 +1168,7 @@ mrb_value os_count_objects(mrb_state *mrb, mrb_value self)
size_t total = 0;
size_t i;
mrb_value hash;
+ RVALUE *free;
struct heap_page* page = mrb->heaps;
if (mrb_get_args(mrb, "|H", &hash) == 0) {
@@ -1188,13 +1189,15 @@ mrb_value os_count_objects(mrb_state *mrb, mrb_value self)
p = page->objects;
pend = p + MRB_HEAP_PAGE_SIZE;
for (;p < pend; p++) {
- if (p->as.basic.flags) {
- counts[mrb_type(p->as.basic)]++;
- }
- else {
- freed++;
- }
+ counts[mrb_type(p->as.basic)]++;
}
+
+ free = (RVALUE*)page->freelist;
+ while (free) {
+ freed++;
+ free = (RVALUE*)free->as.free.next;
+ }
+
total += MRB_HEAP_PAGE_SIZE;
page = page->next;
}