summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-08-12 17:44:30 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-08-13 09:47:08 +0900
commit0c2d81dada88b5a3946c3162187df4223bfe6b4f (patch)
treeae1fc5e5aef4fcbd0a422c476ba026249fc646e3 /eval.c
parentaac4d9d6c7e6b6b0742f3941b574f6006ccb5672 (diff)
Renamed ruby_finalize_{0,1}
And pass rb_execution_context_t as an argument.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/eval.c b/eval.c
index 437838207c..395da9e114 100644
--- a/eval.c
+++ b/eval.c
@@ -25,6 +25,7 @@
#endif
NORETURN(void rb_raise_jump(VALUE, VALUE));
+void rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec);
VALUE rb_eLocalJumpError;
VALUE rb_eSysStackError;
@@ -109,17 +110,18 @@ ruby_init(void)
void *
ruby_options(int argc, char **argv)
{
+ rb_execution_context_t *ec = GET_EC();
enum ruby_tag_type state;
void *volatile iseq = 0;
ruby_init_stack((void *)&iseq);
- EC_PUSH_TAG(GET_EC());
+ EC_PUSH_TAG(ec);
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
SAVE_ROOT_JMPBUF(GET_THREAD(), iseq = ruby_process_options(argc, argv));
}
else {
- rb_clear_trace_func();
- state = error_handle(state);
+ rb_ec_clear_current_thread_trace_func(ec);
+ state = error_handle(ec, state);
iseq = (void *)INT2FIX(state);
}
EC_POP_TAG();
@@ -127,23 +129,23 @@ ruby_options(int argc, char **argv)
}
static void
-ruby_finalize_0(void)
+rb_ec_teardown(rb_execution_context_t *ec)
{
- EC_PUSH_TAG(GET_EC());
+ EC_PUSH_TAG(ec);
if (EC_EXEC_TAG() == TAG_NONE) {
- rb_trap_exit();
+ rb_vm_trap_exit(rb_ec_vm_ptr(ec));
}
EC_POP_TAG();
- rb_exec_end_proc();
- rb_clear_trace_func();
+ rb_ec_exec_end_proc(ec);
+ rb_ec_clear_current_thread_trace_func(ec);
}
static void
-ruby_finalize_1(void)
+rb_ec_finalize(rb_execution_context_t *ec)
{
ruby_sig_finalize();
- GET_EC()->errinfo = Qnil;
- rb_gc_call_finalizer_at_exit();
+ ec->errinfo = Qnil;
+ rb_objspace_call_finalizer(rb_ec_vm_ptr(ec)->objspace);
}
/** Runs the VM finalization processes.
@@ -156,8 +158,9 @@ ruby_finalize_1(void)
void
ruby_finalize(void)
{
- ruby_finalize_0();
- ruby_finalize_1();
+ rb_execution_context_t *ec = GET_EC();
+ rb_ec_teardown(ec);
+ rb_ec_finalize(ec);
}
/** Destructs the VM.
@@ -192,7 +195,7 @@ ruby_cleanup(volatile int ex)
rb_set_safe_level_force(0);
ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]);
- SAVE_ROOT_JMPBUF(th, ruby_finalize_0());
+ SAVE_ROOT_JMPBUF(th, rb_ec_teardown(th->ec));
step_1: step++;
/* protect from Thread#raise */
@@ -209,7 +212,7 @@ ruby_cleanup(volatile int ex)
if (ex == 0) ex = state;
}
th->ec->errinfo = errs[1];
- sysex = error_handle(ex);
+ sysex = error_handle(th->ec, ex);
state = 0;
for (nerr = 0; nerr < numberof(errs); ++nerr) {
@@ -236,13 +239,13 @@ ruby_cleanup(volatile int ex)
mjit_finish(true); // We still need ISeqs here.
- ruby_finalize_1();
+ rb_ec_finalize(th->ec);
/* unlock again if finalizer took mutexes. */
- rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
+ rb_threadptr_unlock_all_locking_mutexes(th);
EC_POP_TAG();
rb_thread_stop_timer_thread();
- ruby_vm_destruct(GET_VM());
+ ruby_vm_destruct(th->vm);
if (state) ruby_default_signal(state);
return sysex;