diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-07-21 17:58:57 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-07-21 17:58:57 -0700 |
| commit | 84991d63886fa75c7c9ba82712e12b0537b2313a (patch) | |
| tree | 55ca92f70d4b489bf989fa886a6259d0db60bb29 /src | |
| parent | 2daf39ddc85c7c4d36e18580a6fb60dcf1f0ecf4 (diff) | |
| parent | c49e2d766eb2ad06ce10dea6e0df436099795fbe (diff) | |
| download | mruby-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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 31 |
1 files changed, 11 insertions, 20 deletions
@@ -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); |
