diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-04-24 12:52:57 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-04-24 13:02:01 +0900 |
commit | f1a52d96a59c63d46cb23af60cdcaf38e30e0512 (patch) | |
tree | cb0492f778489449a04534df6fac82823cb25b5b | |
parent | 2ef66737081ec029f9c82e11671de36bb70a9e3b (diff) | |
download | ruby-f1a52d96a59c63d46cb23af60cdcaf38e30e0512.tar.gz |
Defer setting gc_stress until inits done
[Bug #15784]
-rw-r--r-- | gc.c | 10 | ||||
-rw-r--r-- | inits.c | 1 | ||||
-rw-r--r-- | test/ruby/test_gc.rb | 4 |
3 files changed, 15 insertions, 0 deletions
@@ -2571,6 +2571,8 @@ Init_heap(void) objspace->id_to_obj_tbl = st_init_numtable(); objspace->obj_to_id_tbl = st_init_numtable(); + dont_gc = 1; + gc_stress_set(objspace, ruby_initial_gc_stress); #if RGENGC_ESTIMATE_OLDMALLOC @@ -2584,6 +2586,14 @@ Init_heap(void) finalizer_table = st_init_numtable(); } +void +Init_gc_stress(void) +{ + rb_objspace_t *objspace = &rb_objspace; + + dont_gc = 0; +} + typedef int each_obj_callback(void *, void *, size_t, void *); struct each_obj_args { @@ -67,5 +67,6 @@ rb_call_inits(void) CALL(vm_trace); CALL(vm_stack_canary); CALL(ast); + CALL(gc_stress); } #undef CALL diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb index 8f77f49c9b..5dea1b2742 100644 --- a/test/ruby/test_gc.rb +++ b/test/ruby/test_gc.rb @@ -384,6 +384,10 @@ class TestGc < Test::Unit::TestCase end; end + def test_gc_stress_at_startup + assert_in_out_err([{"RUBY_DEBUG"=>"gc_stress"}], '', [], [], '[Bug #15784]', success: true) + end + def test_gc_disabled_start begin disabled = GC.disable |