diff --git a/eval.c b/eval.c index b201121fc2de82..52f3cc4e9fff81 100644 --- a/eval.c +++ b/eval.c @@ -88,10 +88,8 @@ ruby_setup(void) EC_PUSH_TAG(GET_EC()); if ((state = EC_EXEC_TAG()) == TAG_NONE) { - rb_gc_disable(); rb_call_inits(); ruby_prog_init(); - rb_gc_enable(); GET_VM()->running = 1; } EC_POP_TAG(); diff --git a/inits.c b/inits.c index ad57b754a462d4..976cb223ec840a 100644 --- a/inits.c +++ b/inits.c @@ -20,6 +20,7 @@ static void Init_builtin_prelude(void); void rb_call_inits(void) { + CALL(Thread_Mutex); #if USE_TRANSIENT_HEAP CALL(TransientHeap); #endif diff --git a/thread.c b/thread.c index e463b72a41925f..8980c8cc597e9c 100644 --- a/thread.c +++ b/thread.c @@ -5255,6 +5255,16 @@ rb_thread_backtrace_locations_m(int argc, VALUE *argv, VALUE thval) return rb_vm_thread_backtrace_locations(argc, argv, thval); } +void +Init_Thread_Mutex() +{ + rb_thread_t *th = GET_THREAD(); + + rb_native_mutex_initialize(&th->vm->waitpid_lock); + rb_native_mutex_initialize(&th->vm->workqueue_lock); + rb_native_mutex_initialize(&th->interrupt_lock); +} + /* * Document-class: ThreadError * @@ -5374,9 +5384,6 @@ Init_Thread(void) /* acquire global vm lock */ gvl_init(th->vm); gvl_acquire(th->vm, th); - rb_native_mutex_initialize(&th->vm->waitpid_lock); - rb_native_mutex_initialize(&th->vm->workqueue_lock); - rb_native_mutex_initialize(&th->interrupt_lock); th->pending_interrupt_queue = rb_ary_tmp_new(0); th->pending_interrupt_queue_checked = 0;