зеркало из https://github.com/github/ruby.git
th->ec: vm_once_dispatch.
* vm_insnhelper.c (vm_once_dispatch): accepts `ec`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60693 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
f6c102e6a5
Коммит
8ea78d66a1
|
@ -1164,7 +1164,7 @@ once
|
||||||
()
|
()
|
||||||
(VALUE val)
|
(VALUE val)
|
||||||
{
|
{
|
||||||
val = vm_once_dispatch(iseq, ic, rb_ec_thread_ptr(ec));
|
val = vm_once_dispatch(ec, iseq, ic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3260,8 +3260,9 @@ vm_ic_update(IC ic, VALUE val, const VALUE *reg_ep)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
vm_once_dispatch(ISEQ iseq, IC ic, rb_thread_t *th)
|
vm_once_dispatch(rb_execution_context_t *ec, ISEQ iseq, IC ic)
|
||||||
{
|
{
|
||||||
|
rb_thread_t *th = rb_ec_thread_ptr(ec);
|
||||||
rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
|
rb_thread_t *const RUNNING_THREAD_ONCE_DONE = (rb_thread_t *)(0x1);
|
||||||
union iseq_inline_storage_entry *const is = (union iseq_inline_storage_entry *)ic;
|
union iseq_inline_storage_entry *const is = (union iseq_inline_storage_entry *)ic;
|
||||||
|
|
||||||
|
@ -3275,7 +3276,7 @@ vm_once_dispatch(ISEQ iseq, IC ic, rb_thread_t *th)
|
||||||
val = is->once.value = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
|
val = is->once.value = rb_ensure(vm_once_exec, (VALUE)iseq, vm_once_clear, (VALUE)is);
|
||||||
/* is->once.running_thread is cleared by vm_once_clear() */
|
/* is->once.running_thread is cleared by vm_once_clear() */
|
||||||
is->once.running_thread = RUNNING_THREAD_ONCE_DONE; /* success */
|
is->once.running_thread = RUNNING_THREAD_ONCE_DONE; /* success */
|
||||||
rb_iseq_add_mark_object(th->ec->cfp->iseq, val);
|
rb_iseq_add_mark_object(ec->cfp->iseq, val);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
else if (is->once.running_thread == th) {
|
else if (is->once.running_thread == th) {
|
||||||
|
@ -3284,7 +3285,7 @@ vm_once_dispatch(ISEQ iseq, IC ic, rb_thread_t *th)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* waiting for finish */
|
/* waiting for finish */
|
||||||
RUBY_VM_CHECK_INTS(th->ec);
|
RUBY_VM_CHECK_INTS(ec);
|
||||||
rb_thread_schedule();
|
rb_thread_schedule();
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче