diff options
-rw-r--r-- | eval.c | 39 | ||||
-rw-r--r-- | eval_error.c | 3 | ||||
-rw-r--r-- | eval_jump.c | 7 | ||||
-rw-r--r-- | gc.c | 13 | ||||
-rw-r--r-- | include/ruby/backward.h | 10 | ||||
-rw-r--r-- | include/ruby/intern.h | 3 | ||||
-rw-r--r-- | internal.h | 1 | ||||
-rw-r--r-- | signal.c | 3 | ||||
-rw-r--r-- | vm_core.h | 3 | ||||
-rw-r--r-- | vm_trace.c | 7 |
10 files changed, 42 insertions, 47 deletions
@@ -25,6 +25,7 @@ #endif NORETURN(void rb_raise_jump(VALUE, VALUE)); VALUE rb_eLocalJumpError; VALUE rb_eSysStackError; @@ -109,17 +110,18 @@ ruby_init(void) void * ruby_options(int argc, char **argv) { enum ruby_tag_type state; void *volatile iseq = 0; ruby_init_stack((void *)&iseq); - EC_PUSH_TAG(GET_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); iseq = (void *)INT2FIX(state); } EC_POP_TAG(); @@ -127,23 +129,23 @@ ruby_options(int argc, char **argv) } static void -ruby_finalize_0(void) { - EC_PUSH_TAG(GET_EC()); if (EC_EXEC_TAG() == TAG_NONE) { - rb_trap_exit(); } EC_POP_TAG(); - rb_exec_end_proc(); - rb_clear_trace_func(); } static void -ruby_finalize_1(void) { ruby_sig_finalize(); - GET_EC()->errinfo = Qnil; - rb_gc_call_finalizer_at_exit(); } /** Runs the VM finalization processes. @@ -156,8 +158,9 @@ ruby_finalize_1(void) void ruby_finalize(void) { - ruby_finalize_0(); - ruby_finalize_1(); } /** 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()); 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); 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(); /* unlock again if finalizer took mutexes. */ - rb_threadptr_unlock_all_locking_mutexes(GET_THREAD()); EC_POP_TAG(); rb_thread_stop_timer_thread(); - ruby_vm_destruct(GET_VM()); if (state) ruby_default_signal(state); return sysex; @@ -429,10 +429,9 @@ sysexit_status(VALUE err) rb_bug("Unknown longjmp status %d", status) static int -error_handle(int ex) { int status = EXIT_FAILURE; - rb_execution_context_t *ec = GET_EC(); if (rb_ec_set_raised(ec)) return EXIT_FAILURE; @@ -107,11 +107,10 @@ exec_end_procs_chain(struct end_proc_data *volatile *procs, VALUE *errp) } } -void -rb_exec_end_proc(void) { enum ruby_tag_type state; - rb_execution_context_t * volatile ec = GET_EC(); volatile VALUE errinfo = ec->errinfo; EC_PUSH_TAG(ec); @@ -122,7 +121,7 @@ rb_exec_end_proc(void) } else { EC_TMPPOP_TAG(); - error_handle(state); if (!NIL_P(ec->errinfo)) errinfo = ec->errinfo; EC_REPUSH_TAG(); goto again; @@ -847,7 +847,6 @@ void rb_vm_update_references(void *ptr); void rb_gcdebug_print_obj_condition(VALUE obj); -static void rb_objspace_call_finalizer(rb_objspace_t *objspace); static VALUE define_final0(VALUE obj, VALUE block); static void negative_size_allocation_error(const char *); @@ -3231,20 +3230,14 @@ force_chain_object(st_data_t key, st_data_t val, st_data_t arg) } void -rb_gc_call_finalizer_at_exit(void) -{ -#if RGENGC_CHECK_MODE >= 2 - gc_verify_internal_consistency(Qnil); -#endif - rb_objspace_call_finalizer(&rb_objspace); -} - -static void rb_objspace_call_finalizer(rb_objspace_t *objspace) { RVALUE *p, *pend; size_t i; gc_rest(objspace); if (ATOMIC_EXCHANGE(finalizing, 1)) return; @@ -36,15 +36,25 @@ DECLARE_DEPRECATED_FEATURE(2.2, rb_frame_pop); /* eval.c */ NORETURN(ERRORFUNC(("internal function"), void rb_frozen_class_p(VALUE))); /* error.c */ DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error); DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error_with_enc); DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error_append); /* struct.c */ DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_struct_ptr); /* variable.c */ DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_generic_ivar_table); NORETURN(ERRORFUNC(("internal function"), VALUE rb_mod_const_missing(VALUE, VALUE))); @@ -461,7 +461,6 @@ int rb_mod_method_arity(VALUE, ID); int rb_obj_method_arity(VALUE, ID); VALUE rb_protect(VALUE (*)(VALUE), VALUE, int*); void rb_set_end_proc(void (*)(VALUE), VALUE); -void rb_exec_end_proc(void); void rb_thread_schedule(void); void rb_thread_wait_fd(int); int rb_thread_fd_writable(int); @@ -520,7 +519,6 @@ VALUE rb_gc_location(VALUE); void rb_gc_force_recycle(VALUE); void rb_gc(void); void rb_gc_copy_finalizer(VALUE,VALUE); -void rb_gc_call_finalizer_at_exit(void); VALUE rb_gc_enable(void); VALUE rb_gc_disable(void); VALUE rb_gc_start(void); @@ -719,7 +717,6 @@ VALUE rb_f_kill(int, const VALUE*); #define posix_signal ruby_posix_signal RETSIGTYPE (*posix_signal(int, RETSIGTYPE (*)(int)))(int); #endif -void rb_trap_exit(void); const char *ruby_signal_name(int); void ruby_default_signal(int); /* sprintf.c */ @@ -2204,7 +2204,6 @@ struct timeval rb_time_timeval(VALUE); VALUE rb_obj_is_mutex(VALUE obj); VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg); void rb_thread_execute_interrupts(VALUE th); -void rb_clear_trace_func(void); VALUE rb_get_coverages(void); int rb_get_coverage_mode(void); VALUE rb_default_coverage(int); @@ -1091,9 +1091,8 @@ signal_exec(VALUE cmd, int safe, int sig) } void -rb_trap_exit(void) { - rb_vm_t *vm = GET_VM(); VALUE trap_exit = vm->trap_list.cmd[0]; if (trap_exit) { @@ -582,6 +582,7 @@ typedef struct rb_at_exit_list { struct rb_objspace; struct rb_objspace *rb_objspace_alloc(void); void rb_objspace_free(struct rb_objspace *); typedef struct rb_hook_list_struct { struct rb_event_hook_struct *hooks; @@ -1918,6 +1919,8 @@ rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t * rb_ary_new_from_args(2, eval_script, (VALUE)iseq)); } RUBY_SYMBOL_EXPORT_BEGIN int rb_thread_check_trap_pending(void); @@ -270,13 +270,6 @@ rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data) } void -rb_clear_trace_func(void) -{ - rb_execution_context_t *ec = GET_EC(); - rb_threadptr_remove_event_hook(ec, MATCH_ANY_FILTER_TH, 0, Qundef); -} - -void rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec) { rb_threadptr_remove_event_hook(ec, rb_ec_thread_ptr(ec), 0, Qundef); |