Defer setting gc_stress until inits done

[Bug #15784]
This commit is contained in:
Nobuyoshi Nakada 2019-04-24 12:52:57 +09:00
Родитель 2ef6673708
Коммит f1a52d96a5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4BC7D6DF58D8DF60
3 изменённых файлов: 15 добавлений и 0 удалений

10
gc.c
Просмотреть файл

@ -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

Просмотреть файл

@ -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