Skip to content

Commit 0c2d81d

Browse files
committed
Renamed ruby_finalize_{0,1}
And pass rb_execution_context_t as an argument.
1 parent aac4d9d commit 0c2d81d

File tree

10 files changed

+42
-47
lines changed

10 files changed

+42
-47
lines changed

eval.c

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#endif
2626

2727
NORETURN(void rb_raise_jump(VALUE, VALUE));
28+
void rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec);
2829

2930
VALUE rb_eLocalJumpError;
3031
VALUE rb_eSysStackError;
@@ -109,41 +110,42 @@ ruby_init(void)
109110
void *
110111
ruby_options(int argc, char **argv)
111112
{
113+
rb_execution_context_t *ec = GET_EC();
112114
enum ruby_tag_type state;
113115
void *volatile iseq = 0;
114116

115117
ruby_init_stack((void *)&iseq);
116-
EC_PUSH_TAG(GET_EC());
118+
EC_PUSH_TAG(ec);
117119
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
118120
SAVE_ROOT_JMPBUF(GET_THREAD(), iseq = ruby_process_options(argc, argv));
119121
}
120122
else {
121-
rb_clear_trace_func();
122-
state = error_handle(state);
123+
rb_ec_clear_current_thread_trace_func(ec);
124+
state = error_handle(ec, state);
123125
iseq = (void *)INT2FIX(state);
124126
}
125127
EC_POP_TAG();
126128
return iseq;
127129
}
128130

129131
static void
130-
ruby_finalize_0(void)
132+
rb_ec_teardown(rb_execution_context_t *ec)
131133
{
132-
EC_PUSH_TAG(GET_EC());
134+
EC_PUSH_TAG(ec);
133135
if (EC_EXEC_TAG() == TAG_NONE) {
134-
rb_trap_exit();
136+
rb_vm_trap_exit(rb_ec_vm_ptr(ec));
135137
}
136138
EC_POP_TAG();
137-
rb_exec_end_proc();
138-
rb_clear_trace_func();
139+
rb_ec_exec_end_proc(ec);
140+
rb_ec_clear_current_thread_trace_func(ec);
139141
}
140142

141143
static void
142-
ruby_finalize_1(void)
144+
rb_ec_finalize(rb_execution_context_t *ec)
143145
{
144146
ruby_sig_finalize();
145-
GET_EC()->errinfo = Qnil;
146-
rb_gc_call_finalizer_at_exit();
147+
ec->errinfo = Qnil;
148+
rb_objspace_call_finalizer(rb_ec_vm_ptr(ec)->objspace);
147149
}
148150

149151
/** Runs the VM finalization processes.
@@ -156,8 +158,9 @@ ruby_finalize_1(void)
156158
void
157159
ruby_finalize(void)
158160
{
159-
ruby_finalize_0();
160-
ruby_finalize_1();
161+
rb_execution_context_t *ec = GET_EC();
162+
rb_ec_teardown(ec);
163+
rb_ec_finalize(ec);
161164
}
162165

163166
/** Destructs the VM.
@@ -192,7 +195,7 @@ ruby_cleanup(volatile int ex)
192195
rb_set_safe_level_force(0);
193196
ruby_init_stack(&errs[STACK_UPPER(errs, 0, 1)]);
194197

195-
SAVE_ROOT_JMPBUF(th, ruby_finalize_0());
198+
SAVE_ROOT_JMPBUF(th, rb_ec_teardown(th->ec));
196199

197200
step_1: step++;
198201
/* protect from Thread#raise */
@@ -209,7 +212,7 @@ ruby_cleanup(volatile int ex)
209212
if (ex == 0) ex = state;
210213
}
211214
th->ec->errinfo = errs[1];
212-
sysex = error_handle(ex);
215+
sysex = error_handle(th->ec, ex);
213216

214217
state = 0;
215218
for (nerr = 0; nerr < numberof(errs); ++nerr) {
@@ -236,13 +239,13 @@ ruby_cleanup(volatile int ex)
236239

237240
mjit_finish(true); // We still need ISeqs here.
238241

239-
ruby_finalize_1();
242+
rb_ec_finalize(th->ec);
240243

241244
/* unlock again if finalizer took mutexes. */
242-
rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
245+
rb_threadptr_unlock_all_locking_mutexes(th);
243246
EC_POP_TAG();
244247
rb_thread_stop_timer_thread();
245-
ruby_vm_destruct(GET_VM());
248+
ruby_vm_destruct(th->vm);
246249
if (state) ruby_default_signal(state);
247250

248251
return sysex;

eval_error.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,10 +429,9 @@ sysexit_status(VALUE err)
429429
rb_bug("Unknown longjmp status %d", status)
430430

431431
static int
432-
error_handle(int ex)
432+
error_handle(rb_execution_context_t *ec, int ex)
433433
{
434434
int status = EXIT_FAILURE;
435-
rb_execution_context_t *ec = GET_EC();
436435

437436
if (rb_ec_set_raised(ec))
438437
return EXIT_FAILURE;

eval_jump.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,10 @@ exec_end_procs_chain(struct end_proc_data *volatile *procs, VALUE *errp)
107107
}
108108
}
109109

110-
void
111-
rb_exec_end_proc(void)
110+
static void
111+
rb_ec_exec_end_proc(rb_execution_context_t * ec)
112112
{
113113
enum ruby_tag_type state;
114-
rb_execution_context_t * volatile ec = GET_EC();
115114
volatile VALUE errinfo = ec->errinfo;
116115

117116
EC_PUSH_TAG(ec);
@@ -122,7 +121,7 @@ rb_exec_end_proc(void)
122121
}
123122
else {
124123
EC_TMPPOP_TAG();
125-
error_handle(state);
124+
error_handle(ec, state);
126125
if (!NIL_P(ec->errinfo)) errinfo = ec->errinfo;
127126
EC_REPUSH_TAG();
128127
goto again;

gc.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,6 @@ void rb_vm_update_references(void *ptr);
847847

848848
void rb_gcdebug_print_obj_condition(VALUE obj);
849849

850-
static void rb_objspace_call_finalizer(rb_objspace_t *objspace);
851850
static VALUE define_final0(VALUE obj, VALUE block);
852851

853852
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)
32313230
}
32323231

32333232
void
3234-
rb_gc_call_finalizer_at_exit(void)
3235-
{
3236-
#if RGENGC_CHECK_MODE >= 2
3237-
gc_verify_internal_consistency(Qnil);
3238-
#endif
3239-
rb_objspace_call_finalizer(&rb_objspace);
3240-
}
3241-
3242-
static void
32433233
rb_objspace_call_finalizer(rb_objspace_t *objspace)
32443234
{
32453235
RVALUE *p, *pend;
32463236
size_t i;
32473237

3238+
#if RGENGC_CHECK_MODE >= 2
3239+
gc_verify_internal_consistency(Qnil);
3240+
#endif
32483241
gc_rest(objspace);
32493242

32503243
if (ATOMIC_EXCHANGE(finalizing, 1)) return;

include/ruby/backward.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,25 @@ DECLARE_DEPRECATED_FEATURE(2.2, rb_frame_pop);
3636

3737
/* eval.c */
3838
NORETURN(ERRORFUNC(("internal function"), void rb_frozen_class_p(VALUE)));
39+
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_exec_end_proc);
3940

4041
/* error.c */
4142
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error);
4243
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error_with_enc);
4344
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_compile_error_append);
4445

46+
/* gc.c */
47+
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_gc_call_finalizer_at_exit);
48+
49+
/* signal.c */
50+
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_trap_exit);
51+
4552
/* struct.c */
4653
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_struct_ptr);
4754

55+
/* thread.c */
56+
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_clear_trace_func);
57+
4858
/* variable.c */
4959
DECLARE_DEPRECATED_INTERNAL_FEATURE(rb_generic_ivar_table);
5060
NORETURN(ERRORFUNC(("internal function"), VALUE rb_mod_const_missing(VALUE, VALUE)));

include/ruby/intern.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,6 @@ int rb_mod_method_arity(VALUE, ID);
461461
int rb_obj_method_arity(VALUE, ID);
462462
VALUE rb_protect(VALUE (*)(VALUE), VALUE, int*);
463463
void rb_set_end_proc(void (*)(VALUE), VALUE);
464-
void rb_exec_end_proc(void);
465464
void rb_thread_schedule(void);
466465
void rb_thread_wait_fd(int);
467466
int rb_thread_fd_writable(int);
@@ -520,7 +519,6 @@ VALUE rb_gc_location(VALUE);
520519
void rb_gc_force_recycle(VALUE);
521520
void rb_gc(void);
522521
void rb_gc_copy_finalizer(VALUE,VALUE);
523-
void rb_gc_call_finalizer_at_exit(void);
524522
VALUE rb_gc_enable(void);
525523
VALUE rb_gc_disable(void);
526524
VALUE rb_gc_start(void);
@@ -719,7 +717,6 @@ VALUE rb_f_kill(int, const VALUE*);
719717
#define posix_signal ruby_posix_signal
720718
RETSIGTYPE (*posix_signal(int, RETSIGTYPE (*)(int)))(int);
721719
#endif
722-
void rb_trap_exit(void);
723720
const char *ruby_signal_name(int);
724721
void ruby_default_signal(int);
725722
/* sprintf.c */

internal.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2204,7 +2204,6 @@ struct timeval rb_time_timeval(VALUE);
22042204
VALUE rb_obj_is_mutex(VALUE obj);
22052205
VALUE rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg);
22062206
void rb_thread_execute_interrupts(VALUE th);
2207-
void rb_clear_trace_func(void);
22082207
VALUE rb_get_coverages(void);
22092208
int rb_get_coverage_mode(void);
22102209
VALUE rb_default_coverage(int);

signal.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,9 +1091,8 @@ signal_exec(VALUE cmd, int safe, int sig)
10911091
}
10921092

10931093
void
1094-
rb_trap_exit(void)
1094+
rb_vm_trap_exit(rb_vm_t *vm)
10951095
{
1096-
rb_vm_t *vm = GET_VM();
10971096
VALUE trap_exit = vm->trap_list.cmd[0];
10981097

10991098
if (trap_exit) {

vm_core.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ typedef struct rb_at_exit_list {
582582
struct rb_objspace;
583583
struct rb_objspace *rb_objspace_alloc(void);
584584
void rb_objspace_free(struct rb_objspace *);
585+
void rb_objspace_call_finalizer(struct rb_objspace *);
585586

586587
typedef struct rb_hook_list_struct {
587588
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 *
19181919
rb_ary_new_from_args(2, eval_script, (VALUE)iseq));
19191920
}
19201921

1922+
void rb_vm_trap_exit(rb_vm_t *vm);
1923+
19211924
RUBY_SYMBOL_EXPORT_BEGIN
19221925

19231926
int rb_thread_check_trap_pending(void);

vm_trace.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,6 @@ rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data)
269269
return remove_event_hook(GET_EC(), NULL, func, data);
270270
}
271271

272-
void
273-
rb_clear_trace_func(void)
274-
{
275-
rb_execution_context_t *ec = GET_EC();
276-
rb_threadptr_remove_event_hook(ec, MATCH_ANY_FILTER_TH, 0, Qundef);
277-
}
278-
279272
void
280273
rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec)
281274
{

0 commit comments

Comments
 (0)