From c4c39082af3520cd96aefc2219a7037865f3f710 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sun, 10 Dec 2023 01:47:14 +0900 Subject: [PATCH] add `flags` to `rb_postponed_job_preregister` for future extensions. --- ext/-test-/postponed_job/postponed_job.c | 10 +++++----- ext/-test-/tracepoint/gc_hook.c | 2 +- gc.c | 2 +- include/ruby/debug.h | 3 ++- rjit.c | 2 +- vm_trace.c | 4 ++-- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ext/-test-/postponed_job/postponed_job.c b/ext/-test-/postponed_job/postponed_job.c index 844412aebe93cf..b79b70efb17aad 100644 --- a/ext/-test-/postponed_job/postponed_job.c +++ b/ext/-test-/postponed_job/postponed_job.c @@ -137,7 +137,7 @@ static VALUE pjob_preregister_and_call_with_sleep(VALUE self, VALUE obj) { counter = 0; - rb_postponed_job_handle_t h = rb_postponed_job_preregister(pjob_preregistered_callback, (void *)obj); + rb_postponed_job_handle_t h = rb_postponed_job_preregister(0, pjob_preregistered_callback, (void *)obj); counter++; rb_postponed_job_trigger(h); rb_thread_sleep(0); @@ -154,7 +154,7 @@ static VALUE pjob_preregister_and_call_without_sleep(VALUE self, VALUE obj) { counter = 0; - rb_postponed_job_handle_t h = rb_postponed_job_preregister(pjob_preregistered_callback, (void *)obj); + rb_postponed_job_handle_t h = rb_postponed_job_preregister(0, pjob_preregistered_callback, (void *)obj); counter = 3; rb_postponed_job_trigger(h); rb_postponed_job_trigger(h); @@ -165,9 +165,9 @@ pjob_preregister_and_call_without_sleep(VALUE self, VALUE obj) static VALUE pjob_preregister_multiple_times(VALUE self) { - int r1 = rb_postponed_job_preregister(pjob_noop_callback, NULL); - int r2 = rb_postponed_job_preregister(pjob_noop_callback, NULL); - int r3 = rb_postponed_job_preregister(pjob_noop_callback, NULL); + int r1 = rb_postponed_job_preregister(0, pjob_noop_callback, NULL); + int r2 = rb_postponed_job_preregister(0, pjob_noop_callback, NULL); + int r3 = rb_postponed_job_preregister(0, pjob_noop_callback, NULL); VALUE ary = rb_ary_new(); rb_ary_push(ary, INT2FIX(r1)); rb_ary_push(ary, INT2FIX(r2)); diff --git a/ext/-test-/tracepoint/gc_hook.c b/ext/-test-/tracepoint/gc_hook.c index 76417e400728c0..fc337cd933f770 100644 --- a/ext/-test-/tracepoint/gc_hook.c +++ b/ext/-test-/tracepoint/gc_hook.c @@ -106,7 +106,7 @@ Init_gc_hook(VALUE module) rb_define_module_function(module, "after_gc_exit_hook=", start_after_gc_exit, 1); rb_gc_register_address(&gc_start_proc); rb_gc_register_address(&gc_end_proc); - invoking_proc_pjob = rb_postponed_job_preregister(invoke_proc, NULL); + invoking_proc_pjob = rb_postponed_job_preregister(0, invoke_proc, NULL); if (invoking_proc_pjob == POSTPONED_JOB_HANDLE_INVALID) { rb_raise(rb_eStandardError, "could not preregister invoke_proc"); } diff --git a/gc.c b/gc.c index 6050fd522a442b..a8a55377d8b445 100644 --- a/gc.c +++ b/gc.c @@ -1909,7 +1909,7 @@ rb_objspace_alloc(void) rb_objspace_t *objspace = calloc1(sizeof(rb_objspace_t)); objspace->flags.measure_gc = 1; malloc_limit = gc_params.malloc_limit_min; - objspace->finalize_deferred_pjob = rb_postponed_job_preregister(gc_finalize_deferred, objspace); + objspace->finalize_deferred_pjob = rb_postponed_job_preregister(0, gc_finalize_deferred, objspace); if (objspace->finalize_deferred_pjob == POSTPONED_JOB_HANDLE_INVALID) { rb_bug("Could not preregister postponed job for GC"); } diff --git a/include/ruby/debug.h b/include/ruby/debug.h index 88bd721230970d..7cfeb2d43e0599 100644 --- a/include/ruby/debug.h +++ b/include/ruby/debug.h @@ -686,6 +686,7 @@ typedef unsigned int rb_postponed_job_handle_t; * version might require that this method be called under the GVL; thus, programs which * aim to be forward-compatible should call this method whilst holding the GVL. * + * @param[in] flags Unused and ignored * @param[in] func The function to be pre-registered * @param[in] data The data to be pre-registered * @retval POSTPONED_JOB_HANDLE_INVALID The job table is full; this registration @@ -693,7 +694,7 @@ typedef unsigned int rb_postponed_job_handle_t; * the lifetime of the program. * @retval otherwise A handle which can be passed to `rb_postponed_job_trigger` */ -rb_postponed_job_handle_t rb_postponed_job_preregister(rb_postponed_job_func_t func, void *data); +rb_postponed_job_handle_t rb_postponed_job_preregister(unsigned int flags, rb_postponed_job_func_t func, void *data); /** * Triggers a pre-registered job registered with rb_postponed_job_preregister, diff --git a/rjit.c b/rjit.c index 1ce02649de8b34..7eadc9e7b33b0b 100644 --- a/rjit.c +++ b/rjit.c @@ -432,7 +432,7 @@ rb_rjit_init(const struct rb_rjit_options *opts) rb_rjit_enabled = false; return; } - rjit_iseq_update_references_pjob = rb_postponed_job_preregister(rjit_iseq_update_references, NULL); + rjit_iseq_update_references_pjob = rb_postponed_job_preregister(0, rjit_iseq_update_references, NULL); if (rjit_iseq_update_references_pjob == POSTPONED_JOB_HANDLE_INVALID) { rb_bug("Could not preregister postponed job for RJIT"); } diff --git a/vm_trace.c b/vm_trace.c index dc4c4738b887a2..4b97288f233af5 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -1741,7 +1741,7 @@ rb_vm_memsize_postponed_job_queue(void) rb_postponed_job_handle_t -rb_postponed_job_preregister(rb_postponed_job_func_t func, void *data) +rb_postponed_job_preregister(unsigned int flags, rb_postponed_job_func_t func, void *data) { /* The doc comments say that this function should be called under the GVL, because * that is actually required to get the guarantee that "if a given (func, data) pair @@ -1789,7 +1789,7 @@ pjob_register_legacy_impl(unsigned int flags, rb_postponed_job_func_t func, void { /* We _know_ calling preregister from a signal handler like this is racy; what is * and is not promised is very exhaustively documented in debug.h */ - rb_postponed_job_handle_t h = rb_postponed_job_preregister(func, data); + rb_postponed_job_handle_t h = rb_postponed_job_preregister(0, func, data); if (h == POSTPONED_JOB_HANDLE_INVALID) { return 0; }