summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--insns.def2
-rw-r--r--vm_insnhelper.c7
2 files changed, 5 insertions, 4 deletions
diff --git a/insns.def b/insns.def
index 6e142ed74b..194901fe7b 100644
--- a/insns.def
+++ b/insns.def
@@ -1164,7 +1164,7 @@ once
()
(VALUE val)
{
- val = vm_once_dispatch(iseq, ic, rb_ec_thread_ptr(ec));
+ val = vm_once_dispatch(ec, iseq, ic);
}
/**
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 102e73feeb..8e7d9f9fe2 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -3260,8 +3260,9 @@ vm_ic_update(IC ic, VALUE val, const VALUE *reg_ep)
}
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);
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);
/* is->once.running_thread is cleared by vm_once_clear() */
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;
}
else if (is->once.running_thread == th) {
@@ -3284,7 +3285,7 @@ vm_once_dispatch(ISEQ iseq, IC ic, rb_thread_t *th)
}
else {
/* waiting for finish */
- RUBY_VM_CHECK_INTS(th->ec);
+ RUBY_VM_CHECK_INTS(ec);
rb_thread_schedule();
goto again;
}