7#ifndef RACTOR_CHECK_MODE
8#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
45 rb_nativethread_lock_t
lock;
46#if RACTOR_CHECK_MODE > 0
187RUBY_SYMBOL_EXPORT_BEGIN
194RUBY_SYMBOL_EXPORT_END
197rb_ractor_main_p(
void)
208rb_ractor_status_p(
rb_ractor_t *r,
enum ractor_status status)
241 if (0) fprintf(stderr,
"rb_ractor_thread_switch ec:%p->%p\n",
260#ifdef RB_THREAD_LOCAL_SPECIFIER
262 rb_current_ec_set(ec);
271 if (0) fprintf(stderr,
"rb_ractor_set_current_ec ec:%p->%p\n",
290#if RACTOR_CHECK_MODE > 0
301rb_ractor_setup_belonging(
VALUE obj)
303 rb_ractor_setup_belonging_to(obj, rb_ractor_current_id());
307rb_ractor_belonging(
VALUE obj)
313 return RBASIC(obj)->flags >> 32;
320 uint32_t id = rb_ractor_belonging(obj);
323 if (
UNLIKELY(!rb_ractor_shareable_p(obj))) {
325 rb_bug(
"id == 0 but not shareable");
328 else if (
UNLIKELY(
id != rb_ractor_current_id())) {
329 if (rb_ractor_shareable_p(obj)) {
334 rb_bug(
"rb_ractor_confirm_belonging object-ractor id:%u, current-ractor id:%u",
id, rb_ractor_current_id());
340#define rb_ractor_confirm_belonging(obj) obj
void rb_bug(const char *fmt,...)
#define RB_OBJ_SHAREABLE_P(obj)
rb_ractor_t * rb_ractor_main_alloc(void)
void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key)
VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name)
void rb_ractor_teardown(rb_execution_context_t *ec)
void rb_ractor_terminate_all(void)
void rb_ractor_living_threads_insert(rb_ractor_t *r, rb_thread_t *th)
void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line)
VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc)
void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line)
void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th)
void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args)
void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr)
void rb_ractor_blocking_threads_inc(rb_ractor_t *r, const char *file, int line)
bool rb_ractor_main_p_(void)
void rb_ractor_finish_marking(void)
void rb_ractor_living_threads_remove(rb_ractor_t *r, rb_thread_t *th)
rb_global_vm_lock_t * rb_ractor_gvl(rb_ractor_t *)
void rb_ractor_atexit_exception(rb_execution_context_t *ec)
void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r)
void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result)
VALUE rb_ractor_thread_list(rb_ractor_t *r)
void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r)
void rb_ractor_living_threads_init(rb_ractor_t *r)
#define rb_ractor_confirm_belonging(obj)
bool rb_ractor_shareable_p_continue(VALUE obj)
void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread)
int rb_ractor_living_thread_num(const rb_ractor_t *)
void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line)
enum rb_ractor_basket_type type
struct rb_ractor_basket * baskets
unsigned int reserved_cnt
void(* mark_func)(VALUE v, void *data)
rb_nativethread_cond_t barrier_wait_cond
struct list_node vmlr_node
unsigned int blocking_cnt
rb_execution_context_t * running_ec
struct rb_ractor_struct::@141 threads
enum rb_ractor_struct::ractor_status status_
struct rb_ractor_sync sync
struct rb_ractor_struct::gc_mark_func_data_struct * mfd
struct rb_id_table * idkey_local_storage
rb_ractor_newobj_cache_t newobj_cache
struct rb_ractor_basket taken_basket
enum rb_ractor_sync::ractor_wait::ractor_wait_status status
enum rb_ractor_sync::ractor_wait::ractor_wakeup_status wakeup_status
struct rb_ractor_basket yielded_basket
struct rb_ractor_waiting_list taking_ractors
struct rb_ractor_sync::ractor_wait wait
bool incoming_port_closed
struct rb_ractor_queue incoming_queue
rb_nativethread_cond_t cond
bool outgoing_port_closed
rb_nativethread_lock_t lock
rb_execution_context_t * ec
RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct * ruby_current_ec
native_tls_key_t ruby_current_ec_key
rb_ractor_t * ruby_single_main_ractor