Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
|
#include "ruby/ruby.h"
#include "ruby/thread.h"
#include "ruby/ractor.h"
#include "ruby/thread_native.h"
#include "vm_core.h"
#include "vm_sync.h"
#include "ractor_core.h"
#include "internal/complex.h"
#include "internal/error.h"
#include "internal/hash.h"
#include "internal/rational.h"
#include "internal/struct.h"
#include "internal/thread.h"
#include "variable.h"
#include "gc.h"
#include "transient_heap.h"
#include "ractor.rbinc"
Go to the source code of this file.
Data Structures | |
struct | receive_block_data |
struct | obj_traverse_data |
struct | obj_traverse_callback_data |
struct | rb_obj_traverse_final_data |
struct | obj_traverse_replace_data |
struct | obj_traverse_replace_callback_data |
struct | RVALUE |
struct | rb_ractor_local_key_struct |
struct | freed_ractor_local_keys_struct |
Macros | |
#define | RACTOR_LOCK(r) ractor_lock(r, __FILE__, __LINE__) |
#define | RACTOR_UNLOCK(r) ractor_unlock(r, __FILE__, __LINE__) |
#define | RACTOR_LOCK_SELF(r) ractor_lock_self(r, __FILE__, __LINE__) |
#define | RACTOR_UNLOCK_SELF(r) ractor_unlock_self(r, __FILE__, __LINE__) |
#define | CHECK_AND_REPLACE(v) |
#define | DEFAULT_KEYS_CAPA 0x10 |
Typedefs | |
typedef enum obj_traverse_iterator_result(* | rb_obj_traverse_enter_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* | rb_obj_traverse_leave_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* | rb_obj_traverse_final_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* | rb_obj_traverse_replace_enter_func) (VALUE obj, struct obj_traverse_replace_data *data) |
typedef enum obj_traverse_iterator_result(* | rb_obj_traverse_replace_leave_func) (VALUE obj, struct obj_traverse_replace_data *data) |
Enumerations | |
enum | obj_traverse_iterator_result { traverse_cont , traverse_skip , traverse_stop } |
traverse function More... | |
Variables | |
VALUE | rb_cRactor |
VALUE | rb_eRactorUnsafeError |
VALUE | rb_eRactorIsolationError |
const struct rb_ractor_local_storage_type | rb_ractor_local_storage_type_free |
#define CHECK_AND_REPLACE | ( | v | ) |
#define RACTOR_LOCK | ( | r | ) | ractor_lock(r, __FILE__, __LINE__) |
#define RACTOR_LOCK_SELF | ( | r | ) | ractor_lock_self(r, __FILE__, __LINE__) |
#define RACTOR_UNLOCK | ( | r | ) | ractor_unlock(r, __FILE__, __LINE__) |
#define RACTOR_UNLOCK_SELF | ( | r | ) | ractor_unlock_self(r, __FILE__, __LINE__) |
typedef enum obj_traverse_iterator_result(* rb_obj_traverse_enter_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* rb_obj_traverse_final_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* rb_obj_traverse_leave_func) (VALUE obj) |
typedef enum obj_traverse_iterator_result(* rb_obj_traverse_replace_enter_func) (VALUE obj, struct obj_traverse_replace_data *data) |
typedef enum obj_traverse_iterator_result(* rb_obj_traverse_replace_leave_func) (VALUE obj, struct obj_traverse_replace_data *data) |
void Init_Ractor | ( | void | ) |
Definition at line 2083 of file ractor.c.
References rb_cBasicObject, rb_cObject, rb_cRactor, rb_define_class(), rb_define_class_under(), rb_define_method, rb_eRactorIsolationError, rb_eRactorUnsafeError, rb_eRuntimeError, rb_eStopIteration, and rb_undef_alloc_func().
void rb_gvl_init | ( | rb_global_vm_lock_t * | gvl | ) |
bool rb_obj_is_main_ractor | ( | VALUE | gv | ) |
Definition at line 1707 of file ractor.c.
References DATA_PTR, and rb_ractor_p().
Referenced by rb_objspace_call_finalizer().
void rb_ractor_atexit | ( | rb_execution_context_t * | ec, |
VALUE | result | ||
) |
void rb_ractor_atexit_exception | ( | rb_execution_context_t * | ec | ) |
Definition at line 1675 of file ractor.c.
References rb_execution_context_struct::errinfo.
void rb_ractor_blocking_threads_dec | ( | rb_ractor_t * | cr, |
const char * | file, | ||
int | line | ||
) |
Definition at line 1870 of file ractor.c.
References rb_ractor_struct::blocking_cnt, rb_ractor_struct::cnt, RB_VM_LOCK_ENTER, RB_VM_LOCK_LEAVE, rb_vm_ractor_blocking_cnt_dec(), RUBY_DEBUG_LOG2, rb_ractor_struct::threads, and VM_ASSERT.
void rb_ractor_blocking_threads_inc | ( | rb_ractor_t * | cr, |
const char * | file, | ||
int | line | ||
) |
Definition at line 1858 of file ractor.c.
References rb_ractor_struct::blocking_cnt, rb_ractor_struct::cnt, RUBY_DEBUG_LOG2, rb_ractor_struct::threads, and VM_ASSERT.
void rb_ractor_dump | ( | void | ) |
Definition at line 2111 of file ractor.c.
References rb_ractor_pub::id, rb_vm_struct::main_ractor, rb_ractor_struct::pub, rb_vm_struct::ractor, rb_vm_struct::set, and rb_ractor_struct::status_.
Definition at line 2518 of file ractor.c.
References name, PRIsVALUE, rb_eRactorIsolationError, rb_exc_new_str(), rb_exc_raise(), and rb_sprintf().
void rb_ractor_finish_marking | ( | void | ) |
Definition at line 3215 of file ractor.c.
References DEFAULT_KEYS_CAPA, REALLOC_N, and ruby_xfree().
rb_global_vm_lock_t * rb_ractor_gvl | ( | rb_ractor_t * | r | ) |
Definition at line 1715 of file ractor.c.
References rb_ractor_struct::gvl, and rb_ractor_struct::threads.
Referenced by Init_Thread().
rb_hook_list_t * rb_ractor_hooks | ( | rb_ractor_t * | cr | ) |
int rb_ractor_living_thread_num | ( | const rb_ractor_t * | r | ) |
Definition at line 1721 of file ractor.c.
References rb_ractor_struct::cnt, and rb_ractor_struct::threads.
Referenced by rb_nogvl(), rb_thread_alone(), and rb_thread_terminate_all().
void rb_ractor_living_threads_init | ( | rb_ractor_t * | r | ) |
Definition at line 1546 of file ractor.c.
References rb_ractor_struct::blocking_cnt, rb_ractor_struct::cnt, rb_ractor_struct::set, and rb_ractor_struct::threads.
void rb_ractor_living_threads_insert | ( | rb_ractor_t * | r, |
rb_thread_t * | th | ||
) |
Definition at line 1760 of file ractor.c.
References rb_ractor_struct::cnt, rb_ractor_pub::id, rb_thread_struct::lt_node, NULL, rb_ractor_struct::pub, RACTOR_LOCK, RACTOR_UNLOCK, RUBY_DEBUG_LOG, rb_ractor_struct::set, rb_ractor_struct::threads, rb_thread_struct::vm, and VM_ASSERT.
Referenced by rb_ractor_main_setup().
void rb_ractor_living_threads_remove | ( | rb_ractor_t * | cr, |
rb_thread_t * | th | ||
) |
Definition at line 1838 of file ractor.c.
References rb_ractor_struct::cnt, rb_thread_struct::lt_node, RACTOR_LOCK, RACTOR_UNLOCK, RUBY_DEBUG_LOG, rb_ractor_struct::threads, rb_thread_struct::vm, and VM_ASSERT.
void rb_ractor_local_storage_delkey | ( | rb_ractor_local_key_t | key | ) |
Definition at line 3112 of file ractor.c.
References key, RB_VM_LOCK_ENTER, RB_VM_LOCK_LEAVE, and REALLOC_N.
void * rb_ractor_local_storage_ptr | ( | rb_ractor_local_key_t | key | ) |
rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey | ( | const struct rb_ractor_local_storage_type * | type | ) |
Definition at line 3097 of file ractor.c.
References ALLOC, key, and Qundef.
Referenced by Init_ossl_bn(), InitVM_Random(), and rb_ractor_local_storage_value_newkey().
void rb_ractor_local_storage_ptr_set | ( | rb_ractor_local_key_t | key, |
void * | ptr | ||
) |
VALUE rb_ractor_local_storage_value | ( | rb_ractor_local_key_t | key | ) |
bool rb_ractor_local_storage_value_lookup | ( | rb_ractor_local_key_t | key, |
VALUE * | val | ||
) |
rb_ractor_local_key_t rb_ractor_local_storage_value_newkey | ( | void | ) |
Definition at line 3106 of file ractor.c.
References rb_ractor_local_storage_ptr_newkey().
void rb_ractor_local_storage_value_set | ( | rb_ractor_local_key_t | key, |
VALUE | val | ||
) |
rb_ractor_t * rb_ractor_main_alloc | ( | void | ) |
Definition at line 1508 of file ractor.c.
References EXIT_FAILURE, rb_ractor_pub::id, rb_ractor_struct::loc, MEMZERO, rb_ractor_struct::name, NULL, rb_ractor_struct::pub, Qnil, ruby_mimmalloc(), ruby_single_main_ractor, and rb_ractor_pub::self.
Referenced by Init_BareVM().
void rb_ractor_main_setup | ( | rb_vm_t * | vm, |
rb_ractor_t * | r, | ||
rb_thread_t * | th | ||
) |
Definition at line 1581 of file ractor.c.
References FL_SET_RAW, rb_ractor_struct::main, rb_ractor_struct::pub, Qnil, rb_cRactor, rb_ractor_living_threads_insert(), RUBY_FL_SHAREABLE, rb_ractor_pub::self, rb_ractor_struct::threads, and TypedData_Wrap_Struct.
Referenced by Init_VM().
bool rb_ractor_p | ( | VALUE | gv | ) |
Definition at line 273 of file ractor.c.
References rb_typeddata_is_kind_of().
Referenced by rb_obj_is_main_ractor(), and rb_raw_obj_info().
void rb_ractor_receive_parameters | ( | rb_execution_context_t * | ec, |
rb_ractor_t * | r, | ||
int | len, | ||
VALUE * | ptr | ||
) |
void rb_ractor_send_parameters | ( | rb_execution_context_t * | ec, |
rb_ractor_t * | r, | ||
VALUE | args | ||
) |
Definition at line 1690 of file ractor.c.
References len, and RARRAY_AREF.
VALUE rb_ractor_stderr | ( | void | ) |
Definition at line 2148 of file ractor.c.
References rb_ractor_struct::r_stderr, and rb_stderr.
Referenced by rb_f_abort(), rb_parser_fatal(), rb_write_error2(), and rb_write_error_str().
void rb_ractor_stderr_set | ( | VALUE | err | ) |
Definition at line 2184 of file ractor.c.
References err, rb_ractor_struct::pub, rb_ractor_struct::r_stderr, RB_OBJ_WRITE, rb_stderr, and rb_ractor_pub::self.
VALUE rb_ractor_stdin | ( | void | ) |
Definition at line 2124 of file ractor.c.
References rb_ractor_struct::r_stdin, and rb_stdin.
void rb_ractor_stdin_set | ( | VALUE | in | ) |
Definition at line 2160 of file ractor.c.
References in(), rb_ractor_struct::pub, rb_ractor_struct::r_stdin, RB_OBJ_WRITE, rb_stdin, and rb_ractor_pub::self.
VALUE rb_ractor_stdout | ( | void | ) |
Definition at line 2136 of file ractor.c.
References rb_ractor_struct::r_stdout, and rb_stdout.
Referenced by rb_io_getbyte(), and rb_parser_fatal().
void rb_ractor_stdout_set | ( | VALUE | out | ) |
Definition at line 2172 of file ractor.c.
References out, rb_ractor_struct::pub, rb_ractor_struct::r_stdout, RB_OBJ_WRITE, rb_stdout, and rb_ractor_pub::self.
void rb_ractor_teardown | ( | rb_execution_context_t * | ec | ) |
Definition at line 1652 of file ractor.c.
References rb_ractor_struct::main, NULL, RB_VM_LOCK_ENTER, RB_VM_LOCK_LEAVE, rb_ractor_struct::threads, and VM_ASSERT.
void rb_ractor_terminate_all | ( | void | ) |
Definition at line 1946 of file ractor.c.
References rb_vm_struct::cnt, rb_vm_struct::main_ractor, rb_vm_struct::ractor, rb_thread_terminate_all(), rb_vm_cond_timedwait(), RB_VM_LOCK, rb_vm_ractor_blocking_cnt_dec(), rb_vm_ractor_blocking_cnt_inc(), RB_VM_UNLOCK, RUBY_DEBUG_LOG, rb_vm_struct::sync, rb_vm_struct::terminate_cond, rb_vm_struct::terminate_waiting, and VM_ASSERT.
void rb_ractor_terminate_interrupt_main_thread | ( | rb_ractor_t * | r | ) |
Definition at line 1911 of file ractor.c.
References ASSERT_vm_locking, rb_thread_struct::ec, rb_ractor_struct::main, rb_threadptr_interrupt(), RUBY_DEBUG_LOG, RUBY_VM_SET_TERMINATE_INTERRUPT, THREAD_KILLED, rb_ractor_struct::threads, and VM_ASSERT.
VALUE rb_ractor_thread_list | ( | rb_ractor_t * | r | ) |
Definition at line 1727 of file ractor.c.
References ALLOCA_N, rb_ractor_struct::cnt, RACTOR_LOCK, RACTOR_UNLOCK, rb_ary_new(), rb_ary_push(), rb_thread_struct::self, rb_ractor_struct::set, THREAD_RUNNABLE, THREAD_STOPPED, THREAD_STOPPED_FOREVER, and rb_ractor_struct::threads.
Referenced by rb_thread_list().
void rb_ractor_vm_barrier_interrupt_running_thread | ( | rb_ractor_t * | r | ) |
Definition at line 1892 of file ractor.c.
References ASSERT_vm_locking, RACTOR_LOCK, RACTOR_UNLOCK, RUBY_VM_SET_VM_BARRIER_INTERRUPT, rb_ractor_struct::running_ec, rb_ractor_struct::threads, and VM_ASSERT.
Referenced by rb_vm_barrier().
Definition at line 1689 of file variable.c.
References FL_EXIVAR, FL_SET, FL_TEST, NULL, givar_copy::obj, rb_bug(), RB_VM_LOCK_ENTER, RB_VM_LOCK_LEAVE, RUBY_ASSERT, st_delete, st_insert, and st_lookup.
void rb_thread_terminate_all | ( | rb_thread_t * | th | ) |
Definition at line 581 of file thread.c.
References rb_thread_struct::ec, EC_EXEC_TAG, EC_POP_TAG, EC_PUSH_TAG, rb_ractor_struct::main, rb_thread_struct::ractor, rb_bug(), RB_HRTIME_PER_SEC, rb_ractor_living_thread_num(), rb_threadptr_unlock_all_locking_mutexes(), RUBY_VM_CHECK_INTS_BLOCKING, TAG_NONE, thread_debug, and rb_ractor_struct::threads.
Referenced by rb_ractor_terminate_all().
rb_execution_context_t * rb_vm_main_ractor_ec | ( | rb_vm_t * | vm | ) |
Definition at line 1978 of file ractor.c.
References rb_vm_struct::main_ractor, rb_vm_struct::ractor, rb_ractor_struct::running_ec, and rb_ractor_struct::threads.
Referenced by rb_workqueue_register().
void rb_vm_ractor_blocking_cnt_dec | ( | rb_vm_t * | vm, |
rb_ractor_t * | cr, | ||
const char * | file, | ||
int | line | ||
) |
Definition at line 1798 of file ractor.c.
References ASSERT_vm_locking, rb_vm_struct::blocking_cnt, rb_vm_struct::ractor, RUBY_DEBUG_LOG2, and VM_ASSERT.
Referenced by rb_ractor_blocking_threads_dec(), rb_ractor_terminate_all(), and rb_vm_barrier().
void rb_vm_ractor_blocking_cnt_inc | ( | rb_vm_t * | vm, |
rb_ractor_t * | cr, | ||
const char * | file, | ||
int | line | ||
) |
Definition at line 1790 of file ractor.c.
References ASSERT_vm_locking, and VM_ASSERT.
Referenced by rb_ractor_terminate_all(), and rb_vm_barrier().
VALUE rb_cRactor |
Definition at line 20 of file ractor.c.
Referenced by Init_Ractor(), and rb_ractor_main_setup().
VALUE rb_eRactorIsolationError |
Definition at line 23 of file ractor.c.
Referenced by Init_Ractor(), rb_alias_variable(), rb_const_set(), rb_f_global_variables(), and rb_ractor_ensure_shareable().
VALUE rb_eRactorUnsafeError |
Definition at line 22 of file ractor.c.
Referenced by Init_Ractor().
const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free |