summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-06-01 19:47:33 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-06-01 19:47:33 +0900
commit51e0e690c27023e1f12603dc747aed3510638aaa (patch)
tree68ac2ed91827aed09530e6955cd32f9d3bf3568b /src/gc.c
parent87cc0344cde0e3ccafa162bdbcf8a6ffac61e6ba (diff)
downloadmruby-51e0e690c27023e1f12603dc747aed3510638aaa.tar.gz
mruby-51e0e690c27023e1f12603dc747aed3510638aaa.zip
Avoid invoking GC when disabled or iterating; fix #3681
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gc.c b/src/gc.c
index 4f943b7a0..031e93994 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1436,6 +1436,10 @@ gc_step_ratio_set(mrb_state *mrb, mrb_value obj)
static void
change_gen_gc_mode(mrb_state *mrb, mrb_gc *gc, mrb_bool enable)
{
+ if (gc->disabled || gc->iterating) {
+ gc->generational = enable;
+ return;
+ }
if (is_generational(gc) && !enable) {
clear_all_old(mrb, gc);
mrb_assert(gc->state == MRB_GC_STATE_ROOT);