mirror of
https://github.com/ruby/ruby.git
synced 2025-09-17 01:23:57 +02:00
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]
This commit is contained in:
parent
8247b8edde
commit
182fb73c40
Notes:
git
2020-12-01 15:44:43 +09:00
7 changed files with 267 additions and 35 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue