aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-20 02:05:04 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-20 02:05:16 +1200
commit2abe548f356756788db7f893b221938a5f775ccd (patch)
treeb0b74e62d061168ff14c4fcb8f19c5741afd616d /thread.c
parentab6d8d0b65d42cb872707b330d6172beb8579e8b (diff)
downloadruby-2abe548f356756788db7f893b221938a5f775ccd.tar.gz
Don't change vm_stack/cfp without acquiring gvl first.
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/thread.c b/thread.c
index fdd2a959d1..7cb8062075 100644
--- a/thread.c
+++ b/thread.c
@@ -714,6 +714,10 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start)
}
vm_stack = alloca(size * sizeof(VALUE));
+ VM_ASSERT(vm_stack);
+
+ gvl_acquire(th->vm, th);
+
rb_ec_initialize_vm_stack(th->ec, vm_stack, size);
ruby_thread_set_native(th);
@@ -723,7 +727,6 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start)
thread_debug("thread start: %p\n", (void *)th);
- gvl_acquire(th->vm, th);
{
thread_debug("thread start (get lock): %p\n", (void *)th);
rb_thread_set_current(th);