From 6a9efd68491a4340d990dedfd22de46ea2b3db45 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 19 Nov 2017 12:19:46 +0900 Subject: Invoke `mrb_full_gc()` before `ObjectSpace.count_objects`. --- mrbgems/mruby-objectspace/test/objectspace.rb | 2 +- src/gc.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-objectspace/test/objectspace.rb b/mrbgems/mruby-objectspace/test/objectspace.rb index 4731d53b5..0553b97e2 100644 --- a/mrbgems/mruby-objectspace/test/objectspace.rb +++ b/mrbgems/mruby-objectspace/test/objectspace.rb @@ -31,8 +31,8 @@ assert('ObjectSpace.count_objects') do 1000.times do objs << {} end - objs = nil ObjectSpace.count_objects(h) + objs = nil GC.start ObjectSpace.count_objects(h_after) diff --git a/src/gc.c b/src/gc.c index 794a22e9e..6d2b18b96 100644 --- a/src/gc.c +++ b/src/gc.c @@ -177,7 +177,7 @@ gettimeofday_time(void) #define GC_STEP_SIZE 1024 -/* white: 011, black: 100, gray: 000 */ +/* white: 001 or 010, black: 100, gray: 000 */ #define GC_GRAY 0 #define GC_WHITE_A 1 #define GC_WHITE_B (1 << 1) @@ -1494,7 +1494,6 @@ gc_each_objects(mrb_state *mrb, mrb_gc *gc, mrb_each_object_callback *callback, { mrb_heap_page* page; - mrb_full_gc(mrb); page = gc->heaps; while (page != NULL) { RVALUE *p; @@ -1514,6 +1513,7 @@ mrb_objspace_each_objects(mrb_state *mrb, mrb_each_object_callback *callback, vo { mrb_bool iterating = mrb->gc.iterating; + mrb_full_gc(mrb); mrb->gc.iterating = TRUE; if (iterating) { gc_each_objects(mrb, &mrb->gc, callback, data); -- cgit v1.2.3