Turn off major GC mode before full GC; fix #4000

parent 0866fa38
......@@ -1212,12 +1212,15 @@ mrb_incremental_gc(mrb_state *mrb)
if (is_major_gc(gc)) {
size_t threshold = gc->live_after_mark/100 * MAJOR_GC_INC_RATIO;
if (threshold > MAJOR_GC_TOOMANY) {
gc->full = FALSE;
if (threshold < MAJOR_GC_TOOMANY) {
gc->majorgc_old_threshold = threshold;
}
else {
/* too many objects allocated during incremental GC, */
/* instead of increasing threshold, invoke full GC. */
mrb_full_gc(mrb);
threshold = gc->live_after_mark/100 * MAJOR_GC_INC_RATIO;
}
gc->majorgc_old_threshold = threshold;
gc->full = FALSE;
}
else if (is_minor_gc(gc)) {
if (gc->live > gc->majorgc_old_threshold) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment