summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-07-21 17:58:57 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2013-07-21 17:58:57 -0700
commit84991d63886fa75c7c9ba82712e12b0537b2313a (patch)
tree55ca92f70d4b489bf989fa886a6259d0db60bb29
parent2daf39ddc85c7c4d36e18580a6fb60dcf1f0ecf4 (diff)
parentc49e2d766eb2ad06ce10dea6e0df436099795fbe (diff)
downloadmruby-84991d63886fa75c7c9ba82712e12b0537b2313a.tar.gz
mruby-84991d63886fa75c7c9ba82712e12b0537b2313a.zip
Merge pull request #1392 from Fleurer/gc-rename-advance-phase
rename advance_phace() to incremental_gc_until(), and cleanup some redundant codes with it.
-rw-r--r--src/gc.c31
1 files changed, 11 insertions, 20 deletions
diff --git a/src/gc.c b/src/gc.c
index 581a5ff9c..37d61ad35 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -892,11 +892,11 @@ incremental_gc(mrb_state *mrb, size_t limit)
}
static void
-advance_phase(mrb_state *mrb, enum gc_state to_state)
+incremental_gc_until(mrb_state *mrb, enum gc_state to_state)
{
- while (mrb->gc_state != to_state) {
+ do {
incremental_gc(mrb, ~0);
- }
+ } while (mrb->gc_state != to_state);
}
static void
@@ -906,12 +906,12 @@ clear_all_old(mrb_state *mrb)
gc_assert(is_generational(mrb));
if (is_major_gc(mrb)) {
- advance_phase(mrb, GC_STATE_NONE);
+ incremental_gc_until(mrb, GC_STATE_NONE);
}
mrb->is_generational_gc_mode = FALSE;
prepare_incremental_sweep(mrb);
- advance_phase(mrb, GC_STATE_NONE);
+ incremental_gc_until(mrb, GC_STATE_NONE);
mrb->variable_gray_list = mrb->gray_list = NULL;
mrb->is_generational_gc_mode = origin_mode;
}
@@ -925,9 +925,7 @@ mrb_incremental_gc(mrb_state *mrb)
GC_TIME_START;
if (is_minor_gc(mrb)) {
- do {
- incremental_gc(mrb, ~0);
- } while (mrb->gc_state != GC_STATE_NONE);
+ incremental_gc_until(mrb, GC_STATE_NONE);
}
else {
size_t limit = 0, result = 0;
@@ -967,17 +965,13 @@ mrb_incremental_gc(mrb_state *mrb)
void
mrb_garbage_collect(mrb_state *mrb)
{
- size_t max_limit = ~0;
-
if (mrb->gc_disabled) return;
GC_INVOKE_TIME_REPORT("mrb_garbage_collect()");
GC_TIME_START;
if (mrb->gc_state == GC_STATE_SWEEP) {
/* finish sweep phase */
- while (mrb->gc_state != GC_STATE_NONE) {
- incremental_gc(mrb, max_limit);
- }
+ incremental_gc_until(mrb, GC_STATE_NONE);
}
/* clean all black object as old */
@@ -986,10 +980,7 @@ mrb_garbage_collect(mrb_state *mrb)
mrb->gc_full = TRUE;
}
- do {
- incremental_gc(mrb, max_limit);
- } while (mrb->gc_state != GC_STATE_NONE);
-
+ incremental_gc_until(mrb, GC_STATE_NONE);
mrb->gc_threshold = (mrb->gc_live_after_mark/100) * mrb->gc_interval_ratio;
if (is_generational(mrb)) {
@@ -1191,7 +1182,7 @@ change_gen_gc_mode(mrb_state *mrb, mrb_int enable)
mrb->gc_full = FALSE;
}
else if (!is_generational(mrb) && enable) {
- advance_phase(mrb, GC_STATE_NONE);
+ incremental_gc_until(mrb, GC_STATE_NONE);
mrb->majorgc_old_threshold = mrb->gc_live_after_mark/100 * DEFAULT_MAJOR_GC_INC_RATIO;
mrb->gc_full = FALSE;
}
@@ -1445,7 +1436,7 @@ test_incremental_gc(void)
incremental_gc(mrb, max);
gc_assert(mrb->gc_state == GC_STATE_MARK);
puts(" in GC_STATE_MARK");
- advance_phase(mrb, GC_STATE_SWEEP);
+ incremental_gc_until(mrb, GC_STATE_SWEEP);
gc_assert(mrb->gc_state == GC_STATE_SWEEP);
puts(" in GC_STATE_SWEEP");
@@ -1484,7 +1475,7 @@ test_incremental_gc(void)
gc_assert(mrb->live == total-freed);
puts("test_incremental_gc(gen)");
- advance_phase(mrb, GC_STATE_SWEEP);
+ incremental_gc_until(mrb, GC_STATE_SWEEP);
change_gen_gc_mode(mrb, TRUE);
gc_assert(mrb->gc_full == FALSE);