summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gc.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/gc.c b/src/gc.c
index 3e3acfdfb..222fc0ce6 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1007,16 +1007,15 @@ mrb_full_gc(mrb_state *mrb)
GC_INVOKE_TIME_REPORT("mrb_full_gc()");
GC_TIME_START;
- if (mrb->gc_state != GC_STATE_NONE) {
- /* finish half baked GC cycle */
- incremental_gc_until(mrb, GC_STATE_NONE);
- }
-
- /* clear all the old objects back to young */
if (is_generational(mrb)) {
+ /* clear all the old objects back to young */
clear_all_old(mrb);
mrb->gc_full = TRUE;
}
+ else if (mrb->gc_state != GC_STATE_NONE) {
+ /* finish half baked GC cycle */
+ incremental_gc_until(mrb, GC_STATE_NONE);
+ }
incremental_gc_until(mrb, GC_STATE_NONE);
mrb->gc_threshold = (mrb->gc_live_after_mark/100) * mrb->gc_interval_ratio;