eval.c: use the given thread
* eval.c (setup_exception): use the given thread instead of implicit current thread. * load.c (rb_load_internal0): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49709 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
edad4f3bc6
commit
dcc004cba9
24
eval.c
24
eval.c
@ -167,27 +167,27 @@ ruby_cleanup(volatile int ex)
|
|||||||
|
|
||||||
rb_threadptr_interrupt(th);
|
rb_threadptr_interrupt(th);
|
||||||
rb_threadptr_check_signal(th);
|
rb_threadptr_check_signal(th);
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
SAVE_ROOT_JMPBUF(th, { RUBY_VM_CHECK_INTS(th); });
|
SAVE_ROOT_JMPBUF(th, { RUBY_VM_CHECK_INTS(th); });
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
|
|
||||||
errs[1] = th->errinfo;
|
errs[1] = th->errinfo;
|
||||||
th->safe_level = 0;
|
th->safe_level = 0;
|
||||||
ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]);
|
ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]);
|
||||||
|
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
SAVE_ROOT_JMPBUF(th, ruby_finalize_0());
|
SAVE_ROOT_JMPBUF(th, ruby_finalize_0());
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
|
|
||||||
/* protect from Thread#raise */
|
/* protect from Thread#raise */
|
||||||
th->status = THREAD_KILLED;
|
th->status = THREAD_KILLED;
|
||||||
|
|
||||||
errs[0] = th->errinfo;
|
errs[0] = th->errinfo;
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
SAVE_ROOT_JMPBUF(th, rb_thread_terminate_all());
|
SAVE_ROOT_JMPBUF(th, rb_thread_terminate_all());
|
||||||
}
|
}
|
||||||
@ -235,7 +235,7 @@ ruby_cleanup(volatile int ex)
|
|||||||
|
|
||||||
/* unlock again if finalizer took mutexes. */
|
/* unlock again if finalizer took mutexes. */
|
||||||
rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
|
rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
rb_thread_stop_timer_thread(1);
|
rb_thread_stop_timer_thread(1);
|
||||||
ruby_vm_destruct(GET_VM());
|
ruby_vm_destruct(GET_VM());
|
||||||
if (state) ruby_default_signal(state);
|
if (state) ruby_default_signal(state);
|
||||||
@ -252,14 +252,14 @@ ruby_exec_internal(void *n)
|
|||||||
|
|
||||||
if (!n) return 0;
|
if (!n) return 0;
|
||||||
|
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
SAVE_ROOT_JMPBUF(th, {
|
SAVE_ROOT_JMPBUF(th, {
|
||||||
th->base_block = 0;
|
th->base_block = 0;
|
||||||
rb_iseq_eval_main(iseq);
|
rb_iseq_eval_main(iseq);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -539,7 +539,7 @@ setup_exception(rb_thread_t *th, int tag, volatile VALUE mesg, VALUE cause)
|
|||||||
int status;
|
int status;
|
||||||
|
|
||||||
mesg = e;
|
mesg = e;
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((status = EXEC_TAG()) == 0) {
|
if ((status = EXEC_TAG()) == 0) {
|
||||||
th->errinfo = Qnil;
|
th->errinfo = Qnil;
|
||||||
e = rb_obj_as_string(mesg);
|
e = rb_obj_as_string(mesg);
|
||||||
@ -557,7 +557,7 @@ setup_exception(rb_thread_t *th, int tag, volatile VALUE mesg, VALUE cause)
|
|||||||
rb_obj_class(mesg), e);
|
rb_obj_class(mesg), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
if (status == TAG_FATAL && th->errinfo == exception_error) {
|
if (status == TAG_FATAL && th->errinfo == exception_error) {
|
||||||
th->errinfo = mesg;
|
th->errinfo = mesg;
|
||||||
}
|
}
|
||||||
@ -907,11 +907,11 @@ rb_ensure(VALUE (*b_proc)(ANYARGS), VALUE data1, VALUE (*e_proc)(ANYARGS), VALUE
|
|||||||
ensure_list.entry.data2 = data2;
|
ensure_list.entry.data2 = data2;
|
||||||
ensure_list.next = th->ensure_list;
|
ensure_list.next = th->ensure_list;
|
||||||
th->ensure_list = &ensure_list;
|
th->ensure_list = &ensure_list;
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
result = (*b_proc) (data1);
|
result = (*b_proc) (data1);
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
errinfo = th->errinfo;
|
errinfo = th->errinfo;
|
||||||
th->ensure_list=ensure_list.next;
|
th->ensure_list=ensure_list.next;
|
||||||
(*ensure_list.entry.e_proc)(ensure_list.entry.data2);
|
(*ensure_list.entry.e_proc)(ensure_list.entry.data2);
|
||||||
|
@ -116,7 +116,7 @@ rb_exec_end_proc(void)
|
|||||||
rb_thread_t *th = GET_THREAD();
|
rb_thread_t *th = GET_THREAD();
|
||||||
volatile VALUE errinfo = th->errinfo;
|
volatile VALUE errinfo = th->errinfo;
|
||||||
|
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
if ((status = EXEC_TAG()) == 0) {
|
if ((status = EXEC_TAG()) == 0) {
|
||||||
again:
|
again:
|
||||||
exec_end_procs_chain(&ephemeral_end_procs);
|
exec_end_procs_chain(&ephemeral_end_procs);
|
||||||
@ -130,7 +130,7 @@ rb_exec_end_proc(void)
|
|||||||
TH_REPUSH_TAG();
|
TH_REPUSH_TAG();
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
|
|
||||||
rb_set_safe_level_force(safe);
|
rb_set_safe_level_force(safe);
|
||||||
th->errinfo = errinfo;
|
th->errinfo = errinfo;
|
||||||
|
8
load.c
8
load.c
@ -600,7 +600,7 @@ rb_load_internal0(rb_thread_t *th, VALUE fname, int wrap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mild_compile_error = th->mild_compile_error;
|
mild_compile_error = th->mild_compile_error;
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
state = EXEC_TAG();
|
state = EXEC_TAG();
|
||||||
if (state == 0) {
|
if (state == 0) {
|
||||||
NODE *node;
|
NODE *node;
|
||||||
@ -613,7 +613,7 @@ rb_load_internal0(rb_thread_t *th, VALUE fname, int wrap)
|
|||||||
th->mild_compile_error--;
|
th->mild_compile_error--;
|
||||||
rb_iseq_eval(iseq);
|
rb_iseq_eval(iseq);
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
|
|
||||||
#if !defined __GNUC__
|
#if !defined __GNUC__
|
||||||
th = th0;
|
th = th0;
|
||||||
@ -965,7 +965,7 @@ rb_require_internal(VALUE fname, int safe)
|
|||||||
rb_sourceline());
|
rb_sourceline());
|
||||||
}
|
}
|
||||||
|
|
||||||
PUSH_TAG();
|
TH_PUSH_TAG(th);
|
||||||
saved.safe = rb_safe_level();
|
saved.safe = rb_safe_level();
|
||||||
if ((state = EXEC_TAG()) == 0) {
|
if ((state = EXEC_TAG()) == 0) {
|
||||||
VALUE path;
|
VALUE path;
|
||||||
@ -1015,7 +1015,7 @@ rb_require_internal(VALUE fname, int safe)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
POP_TAG();
|
TH_POP_TAG();
|
||||||
load_unlock(ftptr, !state);
|
load_unlock(ftptr, !state);
|
||||||
|
|
||||||
rb_set_safe_level_force(saved.safe);
|
rb_set_safe_level_force(saved.safe);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user