From 182fb73c40351f917bf44626c44c1adb6cb1aa5a Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Mon, 30 Nov 2020 16:18:43 +0900 Subject: rb_ext_ractor_safe() to declare ractor-safe ext C extensions can violate the ractor-safety, so only ractor-safe C extensions (C methods) can run on non-main ractors. rb_ext_ractor_safe(true) declares that the successive defined methods are ractor-safe. Otherwiwze, defined methods checked they are invoked in main ractor and raise an error if invoked at non-main ractors. [Feature #17307] --- vm_core.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'vm_core.h') diff --git a/vm_core.h b/vm_core.h index 53bf67c2e5..5ddd7b4b4f 100644 --- a/vm_core.h +++ b/vm_core.h @@ -912,6 +912,10 @@ void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t // @param ec the execution context to update. void rb_ec_clear_vm_stack(rb_execution_context_t *ec); +struct rb_ext_config { + bool ractor_safe; +}; + typedef struct rb_ractor_struct rb_ractor_t; typedef struct rb_thread_struct { @@ -1000,6 +1004,8 @@ typedef struct rb_thread_struct { /* misc */ VALUE name; + struct rb_ext_config ext_config; + #ifdef USE_SIGALTSTACK void *altstack; #endif @@ -1994,6 +2000,8 @@ extern void rb_reset_coverages(void); void rb_postponed_job_flush(rb_vm_t *vm); +extern VALUE rb_eRactorUnsafeError; // ractor.c + RUBY_SYMBOL_EXPORT_END #endif /* RUBY_VM_CORE_H */ -- cgit v1.2.3