Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Enumerations | Functions | Variables
thread.c File Reference
#include "eval_intern.h"
#include "gc.h"
#include "timev.h"
#include "ruby/io.h"
#include "ruby/thread.h"
#include "ruby/thread_native.h"
#include "internal.h"
#include "thread_sync.c"
Include dependency graph for thread.c:

Go to the source code of this file.

Data Structures

struct  waiting_fd
 
struct  rb_blocking_region_buffer
 
struct  join_arg
 
struct  select_args
 
struct  thgroup
 
struct  exec_recursive_params
 

Macros

#define __USE_FORTIFY_LEVEL   0
 
#define USE_NATIVE_THREAD_PRIORITY   0
 
#define RUBY_THREAD_PRIORITY_MAX   3
 
#define RUBY_THREAD_PRIORITY_MIN   -3
 
#define THREAD_DEBUG   0
 
#define eKillSignal   INT2FIX(0)
 
#define eTerminateSignal   INT2FIX(1)
 
#define THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION
 
#define RB_GC_SAVE_MACHINE_REGISTER_STACK(th)
 
#define RB_GC_SAVE_MACHINE_CONTEXT(th)
 
#define GVL_UNLOCK_BEGIN()
 
#define GVL_UNLOCK_END()
 
#define only_if_constant(expr, notconst)   notconst
 
#define BLOCKING_REGION(exec, ubf, ubfarg, fail_if_interrupted)
 
#define RUBY_VM_CHECK_INTS_BLOCKING(th)   vm_check_ints_blocking(th)
 
#define thread_debug   if(0)printf
 
#define fill_thread_id_string(thid, buf)   (thid)
 
#define fill_thread_id_str(th)   (void)0
 
#define thread_id_str(th)   ((void *)(th)->thread_id)
 
#define PRI_THREAD_ID   "p"
 
#define thread_start_func_2(th, st, rst)   thread_start_func_2(th, st)
 
#define threadptr_initialized(th)   ((th)->first_args != 0)
 
#define DELAY_INFTY   1E30
 
#define rb_fd_no_init(fds)   (void)(fds)
 
#define restore_fdset(fds1, fds2)   ((fds1) ? rb_fd_dup(fds1, fds2) : (void)0)
 
#define do_select_update()
 
#define fd_init_copy(f)   (f##fds) ? rb_fd_init_copy(&orig_##f, f##fds) : rb_fd_no_init(&orig_##f)
 
#define fd_term(f)   if (f##fds) rb_fd_term(&orig_##f)
 
#define GetThreadShieldPtr(obj)   ((VALUE)rb_check_typeddata((obj), &thread_shield_data_type))
 
#define THREAD_SHIELD_WAITING_MASK   (FL_USER0|FL_USER1|FL_USER2|FL_USER3|FL_USER4|FL_USER5|FL_USER6|FL_USER7|FL_USER8|FL_USER9|FL_USER10|FL_USER11|FL_USER12|FL_USER13|FL_USER14|FL_USER15|FL_USER16|FL_USER17|FL_USER18|FL_USER19)
 
#define THREAD_SHIELD_WAITING_SHIFT   (FL_USHIFT)
 
#define rb_thread_shield_waiting(b)   (int)((RBASIC(b)->flags&THREAD_SHIELD_WAITING_MASK)>>THREAD_SHIELD_WAITING_SHIFT)
 
#define OBJ_ID_EQL(obj_id, other)   ((obj_id) == (other))
 
#define rb_intern(str)   rb_intern_const(str)
 

Enumerations

enum  handle_interrupt_timing { INTERRUPT_NONE, INTERRUPT_IMMEDIATE, INTERRUPT_ON_BLOCKING, INTERRUPT_NEVER }
 

Functions

static void sleep_timeval (rb_thread_t *th, struct timeval time, int spurious_check)
 
static void sleep_wait_for_interrupt (rb_thread_t *th, double sleepsec, int spurious_check)
 
static void sleep_forever (rb_thread_t *th, int nodeadlock, int spurious_check)
 
static void rb_thread_sleep_deadly_allow_spurious_wakeup (void)
 
static double timeofday (void)
 
static int rb_threadptr_dead (rb_thread_t *th)
 
static void rb_check_deadlock (rb_vm_t *vm)
 
static int rb_threadptr_pending_interrupt_empty_p (rb_thread_t *th)
 
static void st_delete_wrap (st_table *table, st_data_t key)
 
static int set_unblock_function (rb_thread_t *th, rb_unblock_function_t *func, void *arg, struct rb_unblock_callback *old, int fail_if_interrupted)
 
static void reset_unblock_function (rb_thread_t *th, const struct rb_unblock_callback *old)
 
static int blocking_region_begin (rb_thread_t *th, struct rb_blocking_region_buffer *region, rb_unblock_function_t *ubf, void *arg, int fail_if_interrupted)
 
static void blocking_region_end (rb_thread_t *th, struct rb_blocking_region_buffer *region)
 
static void vm_check_ints_blocking (rb_thread_t *th)
 
static int vm_living_thread_num (rb_vm_t *vm)
 
 NOINLINE (static int thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_start))
 
static void timer_thread_function (void *)
 
void rb_vm_gvl_destroy (rb_vm_t *vm)
 
void rb_nativethread_lock_initialize (rb_nativethread_lock_t *lock)
 
void rb_nativethread_lock_destroy (rb_nativethread_lock_t *lock)
 
void rb_nativethread_lock_lock (rb_nativethread_lock_t *lock)
 
void rb_nativethread_lock_unlock (rb_nativethread_lock_t *lock)
 
static void rb_threadptr_interrupt_common (rb_thread_t *th, int trap)
 
void rb_threadptr_interrupt (rb_thread_t *th)
 
void rb_threadptr_trap_interrupt (rb_thread_t *th)
 
static void terminate_all (rb_vm_t *vm, const rb_thread_t *main_thread)
 
void rb_threadptr_unlock_all_locking_mutexes (rb_thread_t *th)
 
void rb_thread_terminate_all (void)
 
static void thread_cleanup_func_before_exec (void *th_ptr)
 
static void thread_cleanup_func (void *th_ptr, int atfork)
 
static VALUE rb_threadptr_raise (rb_thread_t *, int, VALUE *)
 
static VALUE rb_thread_inspect (VALUE thread)
 
void ruby_thread_init_stack (rb_thread_t *th)
 
const VALUErb_vm_proc_local_ep (VALUE proc)
 
static void thread_do_start (rb_thread_t *th, VALUE args)
 
static int thread_start_func_2 (rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_start)
 
static VALUE thread_create_core (VALUE thval, VALUE args, VALUE(*fn)(ANYARGS))
 
static VALUE thread_s_new (int argc, VALUE *argv, VALUE klass)
 
static VALUE thread_start (VALUE klass, VALUE args)
 
static VALUE thread_initialize (VALUE thread, VALUE args)
 
VALUE rb_thread_create (VALUE(*fn)(ANYARGS), void *arg)
 
static VALUE remove_from_join_list (VALUE arg)
 
static VALUE thread_join_sleep (VALUE arg)
 
static VALUE thread_join (rb_thread_t *target_th, double delay)
 
static VALUE thread_join_m (int argc, VALUE *argv, VALUE self)
 
static VALUE thread_value (VALUE self)
 
static struct timeval double2timeval (double d)
 
static void getclockofday (struct timeval *tp)
 
void rb_thread_sleep_forever (void)
 
void rb_thread_sleep_deadly (void)
 
void rb_thread_wait_for (struct timeval time)
 
void rb_thread_check_ints (void)
 
int rb_thread_check_trap_pending (void)
 
int rb_thread_interrupted (VALUE thval)
 
void rb_thread_sleep (int sec)
 
static void rb_thread_schedule_limits (unsigned long limits_us)
 
void rb_thread_schedule (void)
 
static void * call_without_gvl (void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2, int fail_if_interrupted)
 
void * rb_thread_call_without_gvl2 (void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2)
 
void * rb_thread_call_without_gvl (void *(*func)(void *data), void *data1, rb_unblock_function_t *ubf, void *data2)
 
VALUE rb_thread_io_blocking_region (rb_blocking_function_t *func, void *data1, int fd)
 
void * rb_thread_call_with_gvl (void *(*func)(void *), void *data1)
 
int ruby_thread_has_gvl_p (void)
 
static VALUE thread_s_pass (VALUE klass)
 
void rb_threadptr_pending_interrupt_clear (rb_thread_t *th)
 
void rb_threadptr_pending_interrupt_enque (rb_thread_t *th, VALUE v)
 
static void threadptr_check_pending_interrupt_queue (rb_thread_t *th)
 
static enum handle_interrupt_timing rb_threadptr_pending_interrupt_check_mask (rb_thread_t *th, VALUE err)
 
static int rb_threadptr_pending_interrupt_include_p (rb_thread_t *th, VALUE err)
 
static VALUE rb_threadptr_pending_interrupt_deque (rb_thread_t *th, enum handle_interrupt_timing timing)
 
int rb_threadptr_pending_interrupt_active_p (rb_thread_t *th)
 
static int handle_interrupt_arg_check_i (VALUE key, VALUE val, VALUE args)
 
static VALUE rb_thread_s_handle_interrupt (VALUE self, VALUE mask_arg)
 
static VALUE rb_thread_pending_interrupt_p (int argc, VALUE *argv, VALUE target_thread)
 
static VALUE rb_thread_s_pending_interrupt_p (int argc, VALUE *argv, VALUE self)
 
static void rb_threadptr_to_kill (rb_thread_t *th)
 
static rb_atomic_t threadptr_get_interrupts (rb_thread_t *th)
 
void rb_threadptr_execute_interrupts (rb_thread_t *th, int blocking_timing)
 
void rb_thread_execute_interrupts (VALUE thval)
 
static void rb_threadptr_ready (rb_thread_t *th)
 
void rb_threadptr_setup_exception (rb_thread_t *th, VALUE mesg, VALUE cause)
 
void rb_threadptr_signal_raise (rb_thread_t *th, int sig)
 
void rb_threadptr_signal_exit (rb_thread_t *th)
 
 NORETURN (void ruby_thread_stack_overflow(rb_thread_t *th))
 
void ruby_thread_stack_overflow (rb_thread_t *th)
 
int rb_threadptr_set_raised (rb_thread_t *th)
 
int rb_threadptr_reset_raised (rb_thread_t *th)
 
int rb_notify_fd_close (int fd)
 
void rb_thread_fd_close (int fd)
 
static VALUE thread_raise_m (int argc, VALUE *argv, VALUE self)
 
VALUE rb_thread_kill (VALUE thread)
 
int rb_thread_to_be_killed (VALUE thread)
 
static VALUE rb_thread_s_kill (VALUE obj, VALUE th)
 
static VALUE rb_thread_exit (void)
 
VALUE rb_thread_wakeup (VALUE thread)
 
VALUE rb_thread_wakeup_alive (VALUE thread)
 
VALUE rb_thread_run (VALUE thread)
 
VALUE rb_thread_stop (void)
 
VALUE rb_thread_list (void)
 
VALUE rb_thread_current (void)
 
static VALUE thread_s_current (VALUE klass)
 
VALUE rb_thread_main (void)
 
static VALUE rb_thread_s_main (VALUE klass)
 
static VALUE rb_thread_s_abort_exc (void)
 
static VALUE rb_thread_s_abort_exc_set (VALUE self, VALUE val)
 
static VALUE rb_thread_abort_exc (VALUE thread)
 
static VALUE rb_thread_abort_exc_set (VALUE thread, VALUE val)
 
static VALUE rb_thread_s_report_exc (void)
 
static VALUE rb_thread_s_report_exc_set (VALUE self, VALUE val)
 
static VALUE rb_thread_report_exc (VALUE thread)
 
static VALUE rb_thread_report_exc_set (VALUE thread, VALUE val)
 
VALUE rb_thread_group (VALUE thread)
 
static const char * thread_status_name (rb_thread_t *th, int detail)
 
static VALUE rb_thread_status (VALUE thread)
 
static VALUE rb_thread_alive_p (VALUE thread)
 
static VALUE rb_thread_stop_p (VALUE thread)
 
static VALUE rb_thread_safe_level (VALUE thread)
 
static VALUE rb_thread_getname (VALUE thread)
 
static VALUE rb_thread_setname (VALUE thread, VALUE name)
 
static VALUE threadptr_local_aref (rb_thread_t *th, ID id)
 
VALUE rb_thread_local_aref (VALUE thread, ID id)
 
static VALUE rb_thread_aref (VALUE thread, VALUE key)
 
static VALUE threadptr_local_aset (rb_thread_t *th, ID id, VALUE val)
 
VALUE rb_thread_local_aset (VALUE thread, ID id, VALUE val)
 
static VALUE rb_thread_aset (VALUE self, VALUE id, VALUE val)
 
static VALUE rb_thread_variable_get (VALUE thread, VALUE key)
 
static VALUE rb_thread_variable_set (VALUE thread, VALUE id, VALUE val)
 
static VALUE rb_thread_key_p (VALUE self, VALUE key)
 
static int thread_keys_i (ID key, VALUE value, VALUE ary)
 
int rb_thread_alone (void)
 
static VALUE rb_thread_keys (VALUE self)
 
static int keys_i (VALUE key, VALUE value, VALUE ary)
 
static VALUE rb_thread_variables (VALUE thread)
 
static VALUE rb_thread_variable_p (VALUE thread, VALUE key)
 
static VALUE rb_thread_priority (VALUE thread)
 
static VALUE rb_thread_priority_set (VALUE thread, VALUE prio)
 
static int retryable (int e)
 
static void update_timeval (struct timeval *timeout, double limit)
 
static int do_select (int n, rb_fdset_t *readfds, rb_fdset_t *writefds, rb_fdset_t *exceptfds, struct timeval *timeout)
 
static void rb_thread_wait_fd_rw (int fd, int read)
 
void rb_thread_wait_fd (int fd)
 
int rb_thread_fd_writable (int fd)
 
int rb_thread_fd_select (int max, rb_fdset_t *read, rb_fdset_t *write, rb_fdset_t *except, struct timeval *timeout)
 
static rb_fdset_tinit_set_fd (int fd, rb_fdset_t *fds)
 
static VALUE select_single (VALUE ptr)
 
static VALUE select_single_cleanup (VALUE ptr)
 
int rb_wait_for_single_fd (int fd, int events, struct timeval *tv)
 
void rb_gc_set_stack_end (VALUE **stack_end_p)
 
void rb_threadptr_check_signal (rb_thread_t *mth)
 
void rb_thread_stop_timer_thread (void)
 
void rb_thread_reset_timer_thread (void)
 
void rb_thread_start_timer_thread (void)
 
void rb_thread_atfork (void)
 
void rb_thread_atfork_before_exec (void)
 
static size_t thgroup_memsize (const void *ptr)
 
static VALUE thgroup_s_alloc (VALUE klass)
 
static VALUE thgroup_list (VALUE group)
 
static VALUE thgroup_enclose (VALUE group)
 
static VALUE thgroup_enclosed_p (VALUE group)
 
static VALUE thgroup_add (VALUE group, VALUE thread)
 
static void thread_shield_mark (void *ptr)
 
static VALUE thread_shield_alloc (VALUE klass)
 
static void rb_thread_shield_waiting_inc (VALUE b)
 
static void rb_thread_shield_waiting_dec (VALUE b)
 
VALUE rb_thread_shield_new (void)
 
VALUE rb_thread_shield_wait (VALUE self)
 
static VALUE thread_shield_get_mutex (VALUE self)
 
VALUE rb_thread_shield_release (VALUE self)
 
VALUE rb_thread_shield_destroy (VALUE self)
 
static VALUE threadptr_recursive_hash (rb_thread_t *th)
 
static void threadptr_recursive_hash_set (rb_thread_t *th, VALUE hash)
 
ID rb_frame_last_func (void)
 
static VALUE recursive_list_access (VALUE sym)
 
static VALUE recursive_check (VALUE list, VALUE obj_id, VALUE paired_obj_id)
 
static void recursive_push (VALUE list, VALUE obj, VALUE paired_obj)
 
static int recursive_pop (VALUE list, VALUE obj, VALUE paired_obj)
 
static VALUE exec_recursive_i (RB_BLOCK_CALL_FUNC_ARGLIST(tag, data))
 
static VALUE exec_recursive (VALUE(*func)(VALUE, VALUE, int), VALUE obj, VALUE pairid, VALUE arg, int outer)
 
VALUE rb_exec_recursive (VALUE(*func)(VALUE, VALUE, int), VALUE obj, VALUE arg)
 
VALUE rb_exec_recursive_paired (VALUE(*func)(VALUE, VALUE, int), VALUE obj, VALUE paired_obj, VALUE arg)
 
VALUE rb_exec_recursive_outer (VALUE(*func)(VALUE, VALUE, int), VALUE obj, VALUE arg)
 
VALUE rb_exec_recursive_paired_outer (VALUE(*func)(VALUE, VALUE, int), VALUE obj, VALUE paired_obj, VALUE arg)
 
static VALUE rb_thread_backtrace_m (int argc, VALUE *argv, VALUE thval)
 
static VALUE rb_thread_backtrace_locations_m (int argc, VALUE *argv, VALUE thval)
 
void Init_Thread (void)
 
int ruby_native_thread_p (void)
 
VALUE rb_vm_backtrace_str_ary (rb_thread_t *th, long lev, long n)
 
static void debug_deadlock_check (rb_vm_t *vm, VALUE msg)
 
static void update_coverage (rb_event_flag_t event, VALUE proc, VALUE self, ID id, VALUE klass)
 
VALUE rb_get_coverages (void)
 
void rb_set_coverages (VALUE coverages)
 
static int reset_coverage_i (st_data_t key, st_data_t val, st_data_t dummy)
 
void rb_reset_coverages (void)
 
VALUE rb_uninterruptible (VALUE(*b_proc)(ANYARGS), VALUE data)
 
void ruby_kill (rb_pid_t pid, int sig)
 

Variables

static VALUE rb_cThreadShield
 
static VALUE sym_immediate
 
static VALUE sym_on_blocking
 
static VALUE sym_never
 
static ID id_locals
 
static volatile int system_working = 1
 
static ID recursive_key
 
static const rb_data_type_t thgroup_data_type
 
static const rb_data_type_t thread_shield_data_type
 

Macro Definition Documentation

◆ __USE_FORTIFY_LEVEL

#define __USE_FORTIFY_LEVEL   0

Definition at line 56 of file thread.c.

◆ BLOCKING_REGION

#define BLOCKING_REGION (   exec,
  ubf,
  ubfarg,
  fail_if_interrupted 
)
Value:
do { \
rb_thread_t *__th = GET_THREAD(); \
struct rb_blocking_region_buffer __region; \
if (blocking_region_begin(__th, &__region, (ubf), (ubfarg), fail_if_interrupted) || \
/* always return true unless fail_if_interrupted */ \
!only_if_constant(fail_if_interrupted, TRUE)) { \
exec; \
blocking_region_end(__th, &__region); \
}; \
} while(0)
static int blocking_region_begin(rb_thread_t *th, struct rb_blocking_region_buffer *region, rb_unblock_function_t *ubf, void *arg, int fail_if_interrupted)
Definition: thread.c:1275
#define GET_THREAD()
Definition: vm_core.h:1513
#define only_if_constant(expr, notconst)
Definition: thread.c:158
#define TRUE
Definition: nkf.h:175

Definition at line 160 of file thread.c.

Referenced by call_without_gvl(), do_select(), rb_thread_fd_select(), and rb_thread_io_blocking_region().

◆ DELAY_INFTY

#define DELAY_INFTY   1E30

Definition at line 830 of file thread.c.

Referenced by thread_join_m(), thread_join_sleep(), and thread_value().

◆ do_select_update

#define do_select_update ( )
Value:
(restore_fdset(readfds, &orig_read), \
restore_fdset(writefds, &orig_write), \
restore_fdset(exceptfds, &orig_except), \
update_timeval(timeout, limit), \
TRUE)
#define restore_fdset(fds1, fds2)
Definition: thread.c:3690

Referenced by do_select().

◆ eKillSignal

#define eKillSignal   INT2FIX(0)

Definition at line 94 of file thread.c.

Referenced by rb_thread_kill(), and rb_threadptr_execute_interrupts().

◆ eTerminateSignal

#define eTerminateSignal   INT2FIX(1)

Definition at line 95 of file thread.c.

Referenced by rb_threadptr_execute_interrupts(), and terminate_all().

◆ fd_init_copy

#define fd_init_copy (   f)    (f##fds) ? rb_fd_init_copy(&orig_##f, f##fds) : rb_fd_no_init(&orig_##f)

Referenced by do_select().

◆ fd_term

#define fd_term (   f)    if (f##fds) rb_fd_term(&orig_##f)

Referenced by do_select().

◆ fill_thread_id_str

#define fill_thread_id_str (   th)    (void)0

Definition at line 272 of file thread.c.

◆ fill_thread_id_string

#define fill_thread_id_string (   thid,
  buf 
)    (thid)

Definition at line 271 of file thread.c.

Referenced by vm_living_thread_num().

◆ GetThreadShieldPtr

#define GetThreadShieldPtr (   obj)    ((VALUE)rb_check_typeddata((obj), &thread_shield_data_type))

Definition at line 4383 of file thread.c.

Referenced by rb_thread_shield_wait(), and thread_shield_get_mutex().

◆ GVL_UNLOCK_BEGIN

#define GVL_UNLOCK_BEGIN ( )
Value:
do { \
rb_thread_t *_th_stored = GET_THREAD(); \
RB_GC_SAVE_MACHINE_CONTEXT(_th_stored); \
gvl_release(_th_stored->vm);
#define GET_THREAD()
Definition: vm_core.h:1513

Definition at line 141 of file thread.c.

Referenced by rb_mutex_lock(), and ruby_kill().

◆ GVL_UNLOCK_END

#define GVL_UNLOCK_END ( )
Value:
gvl_acquire(_th_stored->vm, _th_stored); \
rb_thread_set_current(_th_stored); \
} while(0)

Definition at line 146 of file thread.c.

Referenced by rb_mutex_lock(), and ruby_kill().

◆ OBJ_ID_EQL

#define OBJ_ID_EQL (   obj_id,
  other 
)    ((obj_id) == (other))

Referenced by recursive_check().

◆ only_if_constant

#define only_if_constant (   expr,
  notconst 
)    notconst

Definition at line 158 of file thread.c.

◆ PRI_THREAD_ID

#define PRI_THREAD_ID   "p"

Definition at line 274 of file thread.c.

Referenced by debug_deadlock_check(), rb_thread_kill(), thread_join(), and thread_join_sleep().

◆ rb_fd_no_init

#define rb_fd_no_init (   fds)    (void)(fds)

Definition at line 3677 of file thread.c.

◆ RB_GC_SAVE_MACHINE_CONTEXT

#define RB_GC_SAVE_MACHINE_CONTEXT (   th)
Value:
do { \
FLUSH_REGISTER_WINDOWS; \
RB_GC_SAVE_MACHINE_REGISTER_STACK(th); \
setjmp((th)->machine.regs); \
SET_MACHINE_STACK_END(&(th)->machine.stack_end); \
} while (0)

Definition at line 133 of file thread.c.

Referenced by blocking_region_begin(), and rb_thread_schedule_limits().

◆ RB_GC_SAVE_MACHINE_REGISTER_STACK

#define RB_GC_SAVE_MACHINE_REGISTER_STACK (   th)

Definition at line 131 of file thread.c.

◆ rb_intern

#define rb_intern (   str)    rb_intern_const(str)

Referenced by Init_Thread().

◆ rb_thread_shield_waiting

#define rb_thread_shield_waiting (   b)    (int)((RBASIC(b)->flags&THREAD_SHIELD_WAITING_MASK)>>THREAD_SHIELD_WAITING_SHIFT)

◆ restore_fdset

#define restore_fdset (   fds1,
  fds2 
)    ((fds1) ? rb_fd_dup(fds1, fds2) : (void)0)

Definition at line 3690 of file thread.c.

◆ RUBY_THREAD_PRIORITY_MAX

#define RUBY_THREAD_PRIORITY_MAX   3

Definition at line 70 of file thread.c.

Referenced by rb_thread_priority_set().

◆ RUBY_THREAD_PRIORITY_MIN

#define RUBY_THREAD_PRIORITY_MIN   -3

Definition at line 71 of file thread.c.

Referenced by rb_thread_priority_set().

◆ RUBY_VM_CHECK_INTS_BLOCKING

#define RUBY_VM_CHECK_INTS_BLOCKING (   th)    vm_check_ints_blocking(th)

◆ THREAD_DEBUG

#define THREAD_DEBUG   0

Definition at line 75 of file thread.c.

◆ thread_debug

#define thread_debug   if(0)printf

◆ thread_id_str

#define thread_id_str (   th)    ((void *)(th)->thread_id)

Definition at line 273 of file thread.c.

Referenced by debug_deadlock_check(), rb_thread_kill(), thread_join(), and thread_join_sleep().

◆ THREAD_SHIELD_WAITING_MASK

Definition at line 4384 of file thread.c.

Referenced by rb_thread_shield_waiting_dec(), and rb_thread_shield_waiting_inc().

◆ THREAD_SHIELD_WAITING_SHIFT

#define THREAD_SHIELD_WAITING_SHIFT   (FL_USHIFT)

Definition at line 4385 of file thread.c.

Referenced by rb_thread_shield_waiting_dec(), and rb_thread_shield_waiting_inc().

◆ thread_start_func_2

#define thread_start_func_2 (   th,
  st,
  rst 
)    thread_start_func_2(th, st)

Definition at line 278 of file thread.c.

◆ THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION

#define THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION

Definition at line 112 of file thread.c.

◆ threadptr_initialized

#define threadptr_initialized (   th)    ((th)->first_args != 0)

Definition at line 745 of file thread.c.

Referenced by rb_thread_setname(), and thread_s_new().

◆ USE_NATIVE_THREAD_PRIORITY

#define USE_NATIVE_THREAD_PRIORITY   0

Definition at line 69 of file thread.c.

Enumeration Type Documentation

◆ handle_interrupt_timing

Enumerator
INTERRUPT_NONE 
INTERRUPT_IMMEDIATE 
INTERRUPT_ON_BLOCKING 
INTERRUPT_NEVER 

Definition at line 1607 of file thread.c.

Function Documentation

◆ blocking_region_begin()

static int blocking_region_begin ( rb_thread_t th,
struct rb_blocking_region_buffer region,
rb_unblock_function_t ubf,
void *  arg,
int  fail_if_interrupted 
)
inlinestatic

◆ blocking_region_end()

static void blocking_region_end ( rb_thread_t th,
struct rb_blocking_region_buffer region 
)
inlinestatic

◆ call_without_gvl()

static void* call_without_gvl ( void *(*)(void *)  func,
void *  data1,
rb_unblock_function_t ubf,
void *  data2,
int  fail_if_interrupted 
)
static

◆ debug_deadlock_check()

static void debug_deadlock_check ( rb_vm_t vm,
VALUE  msg 
)
static

◆ do_select()

static int do_select ( int  n,
rb_fdset_t readfds,
rb_fdset_t writefds,
rb_fdset_t exceptfds,
struct timeval timeout 
)
static

◆ double2timeval()

static struct timeval double2timeval ( double  d)
static

Definition at line 1046 of file thread.c.

References timeval::tv_sec, timeval::tv_usec, and TYPEOF_TIMEVAL_TV_SEC.

Referenced by sleep_wait_for_interrupt().

◆ exec_recursive()

static VALUE exec_recursive ( VALUE(*)(VALUE, VALUE, int)  func,
VALUE  obj,
VALUE  pairid,
VALUE  arg,
int  outer 
)
static

◆ exec_recursive_i()

static VALUE exec_recursive_i ( RB_BLOCK_CALL_FUNC_ARGLIST(tag, data)  )
static

◆ getclockofday()

static void getclockofday ( struct timeval tp)
static

◆ handle_interrupt_arg_check_i()

static int handle_interrupt_arg_check_i ( VALUE  key,
VALUE  val,
VALUE  args 
)
static

◆ init_set_fd()

static rb_fdset_t* init_set_fd ( int  fd,
rb_fdset_t fds 
)
static

Definition at line 3938 of file thread.c.

References rb_fd_init, and rb_fd_set.

Referenced by rb_wait_for_single_fd().

◆ Init_Thread()

void Init_Thread ( void  )

Definition at line 4784 of file thread.c.

References GET_THREAD, ID2SYM, id_locals, Init_thread_sync(), rb_thread_struct::interrupt_cond, rb_thread_struct::interrupt_lock, rb_thread_struct::interrupt_mask, rb_thread_struct::pending_interrupt_mask_stack, rb_thread_struct::pending_interrupt_queue, rb_thread_struct::pending_interrupt_queue_checked, rb_ary_tmp_new(), rb_cObject, rb_cThread, rb_define_alloc_func(), rb_define_class(), rb_define_const(), rb_define_method(), rb_define_singleton_method(), rb_eIOError, rb_eStandardError, rb_eThreadError, rb_intern, rb_obj_alloc(), rb_thread_abort_exc(), rb_thread_abort_exc_set(), rb_thread_alive_p(), rb_thread_aref(), rb_thread_aset(), rb_thread_backtrace_locations_m(), rb_thread_backtrace_m(), rb_thread_exit(), rb_thread_getname(), rb_thread_group(), rb_thread_key_p(), rb_thread_keys(), rb_thread_kill(), rb_thread_list(), rb_thread_pending_interrupt_p(), rb_thread_priority(), rb_thread_priority_set(), rb_thread_report_exc(), rb_thread_report_exc_set(), rb_thread_run(), rb_thread_s_abort_exc(), rb_thread_s_abort_exc_set(), rb_thread_s_handle_interrupt(), rb_thread_s_kill(), rb_thread_s_main(), rb_thread_s_pending_interrupt_p(), rb_thread_s_report_exc(), rb_thread_s_report_exc_set(), rb_thread_safe_level(), rb_thread_setname(), rb_thread_stop(), rb_thread_stop_p(), rb_thread_variable_get(), rb_thread_variable_p(), rb_thread_variable_set(), rb_thread_variables(), rb_thread_wakeup(), rb_vm_register_special_exception(), ruby_error_stream_closed, sym_immediate, sym_never, sym_on_blocking, rb_thread_struct::thgroup, thgroup_add(), rb_vm_struct::thgroup_default, thgroup_enclose(), thgroup_enclosed_p(), thgroup_list(), thgroup_s_alloc(), rb_vm_struct::thread_destruct_lock, thread_initialize(), thread_join_m(), thread_raise_m(), thread_s_current(), thread_s_new(), thread_s_pass(), thread_start(), thread_value(), and rb_thread_struct::vm.

◆ keys_i()

static int keys_i ( VALUE  key,
VALUE  value,
VALUE  ary 
)
static

Definition at line 3307 of file thread.c.

References rb_ary_push(), and ST_CONTINUE.

Referenced by rb_thread_variables().

◆ NOINLINE()

NOINLINE ( static int   thread_start_func_2rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_start)

◆ NORETURN()

NORETURN ( void   ruby_thread_stack_overflowrb_thread_t *th)

◆ rb_check_deadlock()

static void rb_check_deadlock ( rb_vm_t vm)
static

◆ rb_exec_recursive()

VALUE rb_exec_recursive ( VALUE(*)(VALUE, VALUE, int)  func,
VALUE  obj,
VALUE  arg 
)

◆ rb_exec_recursive_outer()

VALUE rb_exec_recursive_outer ( VALUE(*)(VALUE, VALUE, int)  func,
VALUE  obj,
VALUE  arg 
)

Definition at line 4720 of file thread.c.

References exec_recursive(), and func.

Referenced by rb_hash().

◆ rb_exec_recursive_paired()

VALUE rb_exec_recursive_paired ( VALUE(*)(VALUE, VALUE, int)  func,
VALUE  obj,
VALUE  paired_obj,
VALUE  arg 
)

◆ rb_exec_recursive_paired_outer()

VALUE rb_exec_recursive_paired_outer ( VALUE(*)(VALUE, VALUE, int)  func,
VALUE  obj,
VALUE  paired_obj,
VALUE  arg 
)

Definition at line 4732 of file thread.c.

References exec_recursive(), func, and rb_obj_id().

Referenced by cmp_equal().

◆ rb_frame_last_func()

ID rb_frame_last_func ( void  )

◆ rb_gc_set_stack_end()

void rb_gc_set_stack_end ( VALUE **  stack_end_p)

Definition at line 4019 of file thread.c.

◆ rb_get_coverages()

VALUE rb_get_coverages ( void  )

◆ rb_nativethread_lock_destroy()

void rb_nativethread_lock_destroy ( rb_nativethread_lock_t *  lock)

Definition at line 356 of file thread.c.

Referenced by ossl_dyn_destroy_callback().

◆ rb_nativethread_lock_initialize()

void rb_nativethread_lock_initialize ( rb_nativethread_lock_t *  lock)

Definition at line 350 of file thread.c.

Referenced by Init_ossl_locks(), and ossl_dyn_create_callback().

◆ rb_nativethread_lock_lock()

void rb_nativethread_lock_lock ( rb_nativethread_lock_t *  lock)

Definition at line 362 of file thread.c.

Referenced by ossl_lock_unlock().

◆ rb_nativethread_lock_unlock()

void rb_nativethread_lock_unlock ( rb_nativethread_lock_t *  lock)

Definition at line 368 of file thread.c.

Referenced by ossl_lock_unlock().

◆ rb_notify_fd_close()

int rb_notify_fd_close ( int  fd)

◆ rb_reset_coverages()

void rb_reset_coverages ( void  )

◆ rb_set_coverages()

void rb_set_coverages ( VALUE  coverages)

Definition at line 5010 of file thread.c.

References GET_VM, Qnil, rb_add_event_hook(), RUBY_EVENT_COVERAGE, and update_coverage().

Referenced by rb_coverage_start().

◆ rb_thread_abort_exc()

static VALUE rb_thread_abort_exc ( VALUE  thread)
static

Definition at line 2625 of file thread.c.

References rb_thread_struct::abort_on_exception, GetThreadPtr, Qfalse, Qtrue, and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_abort_exc_set()

static VALUE rb_thread_abort_exc_set ( VALUE  thread,
VALUE  val 
)
static

Definition at line 2647 of file thread.c.

References rb_thread_struct::abort_on_exception, GetThreadPtr, RTEST, waiting_fd::th, and val.

Referenced by Init_Thread().

◆ rb_thread_alive_p()

static VALUE rb_thread_alive_p ( VALUE  thread)
static

Definition at line 2881 of file thread.c.

References GetThreadPtr, Qfalse, Qtrue, rb_threadptr_dead(), and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_alone()

int rb_thread_alone ( void  )

Definition at line 3274 of file thread.c.

References GET_VM, and vm_living_thread_num().

Referenced by rb_thread_schedule_limits(), rb_thread_stop(), and thread_start_func_2().

◆ rb_thread_aref()

static VALUE rb_thread_aref ( VALUE  thread,
VALUE  key 
)
static

Definition at line 3117 of file thread.c.

References Qnil, rb_check_id(), and rb_thread_local_aref().

Referenced by Init_Thread().

◆ rb_thread_aset()

static VALUE rb_thread_aset ( VALUE  self,
VALUE  id,
VALUE  val 
)
static

Definition at line 3172 of file thread.c.

References rb_thread_local_aset(), and rb_to_id().

Referenced by Init_Thread().

◆ rb_thread_atfork()

void rb_thread_atfork ( void  )

Definition at line 4172 of file thread.c.

Referenced by pipe_open(), rb_exec_async_signal_safe(), and rb_thread_start_timer_thread().

◆ rb_thread_atfork_before_exec()

void rb_thread_atfork_before_exec ( void  )

Definition at line 4177 of file thread.c.

Referenced by rb_thread_start_timer_thread().

◆ rb_thread_backtrace_locations_m()

static VALUE rb_thread_backtrace_locations_m ( int  argc,
VALUE argv,
VALUE  thval 
)
static

Definition at line 4763 of file thread.c.

References rb_vm_thread_backtrace_locations().

Referenced by Init_Thread().

◆ rb_thread_backtrace_m()

static VALUE rb_thread_backtrace_m ( int  argc,
VALUE argv,
VALUE  thval 
)
static

Definition at line 4746 of file thread.c.

References rb_vm_thread_backtrace().

Referenced by Init_Thread().

◆ rb_thread_call_with_gvl()

void* rb_thread_call_with_gvl ( void *(*)(void *)  func,
void *  data1 
)

◆ rb_thread_call_without_gvl()

void* rb_thread_call_without_gvl ( void *(*)(void *data)  func,
void *  data1,
rb_unblock_function_t ubf,
void *  data2 
)

Definition at line 1427 of file thread.c.

References call_without_gvl(), FALSE, and func.

◆ rb_thread_call_without_gvl2()

void* rb_thread_call_without_gvl2 ( void *(*)(void *)  func,
void *  data1,
rb_unblock_function_t ubf,
void *  data2 
)

◆ rb_thread_check_ints()

void rb_thread_check_ints ( void  )

◆ rb_thread_check_trap_pending()

int rb_thread_check_trap_pending ( void  )

Definition at line 1226 of file thread.c.

References rb_signal_buff_size().

◆ rb_thread_create()

VALUE rb_thread_create ( VALUE(*)(ANYARGS fn,
void *  arg 
)

Definition at line 823 of file thread.c.

References rb_cThread, rb_thread_alloc(), and thread_create_core().

Referenced by rb_detach_process().

◆ rb_thread_current()

VALUE rb_thread_current ( void  )

◆ rb_thread_execute_interrupts()

void rb_thread_execute_interrupts ( VALUE  thval)

◆ rb_thread_exit()

static VALUE rb_thread_exit ( void  )
static

Definition at line 2357 of file thread.c.

References GET_THREAD, rb_thread_kill(), and rb_thread_struct::self.

Referenced by Init_Thread().

◆ rb_thread_fd_close()

void rb_thread_fd_close ( int  fd)

Definition at line 2226 of file thread.c.

References rb_notify_fd_close(), and rb_thread_schedule().

◆ rb_thread_fd_select()

int rb_thread_fd_select ( int  max,
rb_fdset_t read,
rb_fdset_t write,
rb_fdset_t except,
struct timeval timeout 
)

◆ rb_thread_fd_writable()

int rb_thread_fd_writable ( int  fd)

Definition at line 3788 of file thread.c.

References rb_thread_wait_fd_rw(), and TRUE.

Referenced by io_binwrite_string(), and rb_io_wait_writable().

◆ rb_thread_getname()

static VALUE rb_thread_getname ( VALUE  thread)
static

Definition at line 2947 of file thread.c.

References GetThreadPtr, rb_thread_struct::name, and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_group()

VALUE rb_thread_group ( VALUE  thread)

Definition at line 2778 of file thread.c.

References GetThreadPtr, Qnil, waiting_fd::th, and rb_thread_struct::thgroup.

Referenced by Init_Thread().

◆ rb_thread_inspect()

static VALUE rb_thread_inspect ( VALUE  thread)
static

◆ rb_thread_interrupted()

int rb_thread_interrupted ( VALUE  thval)

Definition at line 1233 of file thread.c.

References GetThreadPtr, RUBY_VM_INTERRUPTED, and waiting_fd::th.

Referenced by maygvl_copy_stream_continue_p().

◆ rb_thread_io_blocking_region()

VALUE rb_thread_io_blocking_region ( rb_blocking_function_t func,
void *  data1,
int  fd 
)

◆ rb_thread_key_p()

static VALUE rb_thread_key_p ( VALUE  self,
VALUE  key 
)
static

◆ rb_thread_keys()

static VALUE rb_thread_keys ( VALUE  self)
static

◆ rb_thread_kill()

VALUE rb_thread_kill ( VALUE  thread)

◆ rb_thread_list()

VALUE rb_thread_list ( void  )

◆ rb_thread_local_aref()

VALUE rb_thread_local_aref ( VALUE  thread,
ID  id 
)

◆ rb_thread_local_aset()

VALUE rb_thread_local_aset ( VALUE  thread,
ID  id,
VALUE  val 
)

◆ rb_thread_main()

VALUE rb_thread_main ( void  )

Definition at line 2525 of file thread.c.

References GET_THREAD.

Referenced by rb_thread_s_main().

◆ rb_thread_pending_interrupt_p()

static VALUE rb_thread_pending_interrupt_p ( int  argc,
VALUE argv,
VALUE  target_thread 
)
static

◆ rb_thread_priority()

static VALUE rb_thread_priority ( VALUE  thread)
static

Definition at line 3395 of file thread.c.

References GetThreadPtr, INT2NUM, rb_thread_struct::priority, and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_priority_set()

static VALUE rb_thread_priority_set ( VALUE  thread,
VALUE  prio 
)
static

◆ rb_thread_report_exc()

static VALUE rb_thread_report_exc ( VALUE  thread)
static

Definition at line 2735 of file thread.c.

References GetThreadPtr, Qfalse, Qtrue, rb_thread_struct::report_on_exception, and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_report_exc_set()

static VALUE rb_thread_report_exc_set ( VALUE  thread,
VALUE  val 
)
static

Definition at line 2757 of file thread.c.

References GetThreadPtr, rb_thread_struct::report_on_exception, RTEST, waiting_fd::th, and val.

Referenced by Init_Thread().

◆ rb_thread_reset_timer_thread()

void rb_thread_reset_timer_thread ( void  )

Definition at line 4081 of file thread.c.

Referenced by after_exec_non_async_signal_safe().

◆ rb_thread_run()

VALUE rb_thread_run ( VALUE  thread)

Definition at line 2427 of file thread.c.

References rb_thread_schedule(), and rb_thread_wakeup().

Referenced by Init_Thread().

◆ rb_thread_s_abort_exc()

static VALUE rb_thread_s_abort_exc ( void  )
static

Definition at line 2565 of file thread.c.

References GET_THREAD, Qfalse, and Qtrue.

Referenced by Init_Thread().

◆ rb_thread_s_abort_exc_set()

static VALUE rb_thread_s_abort_exc_set ( VALUE  self,
VALUE  val 
)
static

Definition at line 2602 of file thread.c.

References GET_THREAD, RTEST, and val.

Referenced by Init_Thread().

◆ rb_thread_s_handle_interrupt()

static VALUE rb_thread_s_handle_interrupt ( VALUE  self,
VALUE  mask_arg 
)
static

◆ rb_thread_s_kill()

static VALUE rb_thread_s_kill ( VALUE  obj,
VALUE  th 
)
static

Definition at line 2338 of file thread.c.

References rb_thread_kill().

Referenced by Init_Thread().

◆ rb_thread_s_main()

static VALUE rb_thread_s_main ( VALUE  klass)
static

Definition at line 2538 of file thread.c.

References rb_thread_main().

Referenced by Init_Thread().

◆ rb_thread_s_pending_interrupt_p()

static VALUE rb_thread_s_pending_interrupt_p ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 1996 of file thread.c.

References GET_THREAD, and rb_thread_pending_interrupt_p().

Referenced by Init_Thread().

◆ rb_thread_s_report_exc()

static VALUE rb_thread_s_report_exc ( void  )
static

Definition at line 2675 of file thread.c.

References GET_THREAD, Qfalse, and Qtrue.

Referenced by Init_Thread().

◆ rb_thread_s_report_exc_set()

static VALUE rb_thread_s_report_exc_set ( VALUE  self,
VALUE  val 
)
static

Definition at line 2712 of file thread.c.

References GET_THREAD, RTEST, and val.

Referenced by Init_Thread().

◆ rb_thread_safe_level()

static VALUE rb_thread_safe_level ( VALUE  thread)
static

Definition at line 2931 of file thread.c.

References GetThreadPtr, INT2NUM, rb_thread_struct::safe_level, and waiting_fd::th.

Referenced by Init_Thread().

◆ rb_thread_schedule()

void rb_thread_schedule ( void  )

◆ rb_thread_schedule_limits()

static void rb_thread_schedule_limits ( unsigned long  limits_us)
static

◆ rb_thread_setname()

static VALUE rb_thread_setname ( VALUE  thread,
VALUE  name 
)
static

◆ rb_thread_shield_destroy()

VALUE rb_thread_shield_destroy ( VALUE  self)

◆ rb_thread_shield_new()

VALUE rb_thread_shield_new ( void  )

Definition at line 4410 of file thread.c.

References DATA_PTR, rb_cThreadShield, rb_mutex_lock(), and thread_shield_alloc().

Referenced by load_lock().

◆ rb_thread_shield_release()

VALUE rb_thread_shield_release ( VALUE  self)

◆ rb_thread_shield_wait()

VALUE rb_thread_shield_wait ( VALUE  self)

◆ rb_thread_shield_waiting_dec()

static void rb_thread_shield_waiting_dec ( VALUE  b)
inlinestatic

◆ rb_thread_shield_waiting_inc()

static void rb_thread_shield_waiting_inc ( VALUE  b)
inlinestatic

◆ rb_thread_sleep()

void rb_thread_sleep ( int  sec)

Definition at line 1241 of file thread.c.

References INT2FIX, rb_thread_wait_for(), and rb_time_timeval().

Referenced by pipe_open(), and rb_exec_async_signal_safe().

◆ rb_thread_sleep_deadly()

void rb_thread_sleep_deadly ( void  )

Definition at line 1163 of file thread.c.

References GET_THREAD, sleep_forever(), thread_debug, and TRUE.

Referenced by autoload_sleep(), and rb_thread_stop().

◆ rb_thread_sleep_deadly_allow_spurious_wakeup()

static void rb_thread_sleep_deadly_allow_spurious_wakeup ( void  )
static

Definition at line 1170 of file thread.c.

References FALSE, GET_THREAD, sleep_forever(), thread_debug, and TRUE.

Referenced by queue_sleep(), and rb_mutex_sleep_forever().

◆ rb_thread_sleep_forever()

void rb_thread_sleep_forever ( void  )

Definition at line 1156 of file thread.c.

References FALSE, GET_THREAD, sleep_forever(), thread_debug, and TRUE.

Referenced by rb_f_sleep(), and rb_thread_fd_select().

◆ rb_thread_start_timer_thread()

void rb_thread_start_timer_thread ( void  )

◆ rb_thread_status()

static VALUE rb_thread_status ( VALUE  thread)
static

◆ rb_thread_stop()

VALUE rb_thread_stop ( void  )

Definition at line 2451 of file thread.c.

References Qnil, rb_eThreadError, rb_raise(), rb_thread_alone(), and rb_thread_sleep_deadly().

Referenced by Init_Thread().

◆ rb_thread_stop_p()

static VALUE rb_thread_stop_p ( VALUE  thread)
static

◆ rb_thread_stop_timer_thread()

void rb_thread_stop_timer_thread ( void  )

Definition at line 4073 of file thread.c.

Referenced by before_exec_non_async_signal_safe(), and ruby_cleanup().

◆ rb_thread_terminate_all()

void rb_thread_terminate_all ( void  )

◆ rb_thread_to_be_killed()

int rb_thread_to_be_killed ( VALUE  thread)

◆ rb_thread_variable_get()

static VALUE rb_thread_variable_get ( VALUE  thread,
VALUE  key 
)
static

Definition at line 3206 of file thread.c.

References id_locals, rb_hash_aref(), rb_ivar_get(), and rb_to_symbol().

Referenced by Init_Thread().

◆ rb_thread_variable_p()

static VALUE rb_thread_variable_p ( VALUE  thread,
VALUE  key 
)
static

Definition at line 3360 of file thread.c.

References ID2SYM, id_locals, Qfalse, Qtrue, rb_check_id(), rb_ivar_get(), RHASH, and st_lookup.

Referenced by Init_Thread().

◆ rb_thread_variable_set()

static VALUE rb_thread_variable_set ( VALUE  thread,
VALUE  id,
VALUE  val 
)
static

Definition at line 3224 of file thread.c.

References id_locals, OBJ_FROZEN, rb_error_frozen(), rb_hash_aset(), rb_ivar_get(), and rb_to_symbol().

Referenced by Init_Thread().

◆ rb_thread_variables()

static VALUE rb_thread_variables ( VALUE  thread)
static

Definition at line 3331 of file thread.c.

References id_locals, keys_i(), rb_ary_new(), rb_hash_foreach(), and rb_ivar_get().

Referenced by Init_Thread().

◆ rb_thread_wait_fd()

void rb_thread_wait_fd ( int  fd)

◆ rb_thread_wait_fd_rw()

static void rb_thread_wait_fd_rw ( int  fd,
int  read 
)
static

◆ rb_thread_wait_for()

void rb_thread_wait_for ( struct timeval  time)

Definition at line 1201 of file thread.c.

References GET_THREAD, sleep_timeval(), and waiting_fd::th.

Referenced by rb_f_sleep(), rb_file_flock(), rb_thread_fd_select(), and rb_thread_sleep().

◆ rb_thread_wakeup()

VALUE rb_thread_wakeup ( VALUE  thread)

Definition at line 2381 of file thread.c.

References rb_eThreadError, rb_raise(), rb_thread_wakeup_alive(), and RTEST.

Referenced by Init_Thread(), and rb_thread_run().

◆ rb_thread_wakeup_alive()

VALUE rb_thread_wakeup_alive ( VALUE  thread)

◆ rb_threadptr_check_signal()

void rb_threadptr_check_signal ( rb_thread_t mth)

Definition at line 4032 of file thread.c.

References rb_signal_buff_size(), and rb_threadptr_trap_interrupt().

Referenced by rb_f_kill(), ruby_cleanup(), and timer_thread_function().

◆ rb_threadptr_dead()

static int rb_threadptr_dead ( rb_thread_t th)
static

◆ rb_threadptr_execute_interrupts()

void rb_threadptr_execute_interrupts ( rb_thread_t th,
int  blocking_timing 
)

◆ rb_threadptr_interrupt()

void rb_threadptr_interrupt ( rb_thread_t th)

◆ rb_threadptr_interrupt_common()

static void rb_threadptr_interrupt_common ( rb_thread_t th,
int  trap 
)
static

◆ rb_threadptr_pending_interrupt_active_p()

int rb_threadptr_pending_interrupt_active_p ( rb_thread_t th)

◆ rb_threadptr_pending_interrupt_check_mask()

static enum handle_interrupt_timing rb_threadptr_pending_interrupt_check_mask ( rb_thread_t th,
VALUE  err 
)
static

◆ rb_threadptr_pending_interrupt_clear()

void rb_threadptr_pending_interrupt_clear ( rb_thread_t th)

Definition at line 1587 of file thread.c.

References rb_thread_struct::pending_interrupt_queue, and rb_ary_clear().

Referenced by rb_threadptr_to_kill().

◆ rb_threadptr_pending_interrupt_deque()

static VALUE rb_threadptr_pending_interrupt_deque ( rb_thread_t th,
enum handle_interrupt_timing  timing 
)
static

◆ rb_threadptr_pending_interrupt_empty_p()

static int rb_threadptr_pending_interrupt_empty_p ( rb_thread_t th)
static

◆ rb_threadptr_pending_interrupt_enque()

void rb_threadptr_pending_interrupt_enque ( rb_thread_t th,
VALUE  v 
)

◆ rb_threadptr_pending_interrupt_include_p()

static int rb_threadptr_pending_interrupt_include_p ( rb_thread_t th,
VALUE  err 
)
static

◆ rb_threadptr_raise()

static VALUE rb_threadptr_raise ( rb_thread_t th,
int  argc,
VALUE argv 
)
static

◆ rb_threadptr_ready()

static void rb_threadptr_ready ( rb_thread_t th)
static

◆ rb_threadptr_reset_raised()

int rb_threadptr_reset_raised ( rb_thread_t th)

◆ rb_threadptr_set_raised()

int rb_threadptr_set_raised ( rb_thread_t th)

◆ rb_threadptr_setup_exception()

void rb_threadptr_setup_exception ( rb_thread_t th,
VALUE  mesg,
VALUE  cause 
)

Definition at line 598 of file eval.c.

References get_thread_errinfo(), Qundef, and rb_ivar_set().

Referenced by rb_threadptr_raise(), and rb_threadptr_ready().

◆ rb_threadptr_signal_exit()

void rb_threadptr_signal_exit ( rb_thread_t th)

◆ rb_threadptr_signal_raise()

void rb_threadptr_signal_raise ( rb_thread_t th,
int  sig 
)

◆ rb_threadptr_to_kill()

static void rb_threadptr_to_kill ( rb_thread_t th)
static

◆ rb_threadptr_trap_interrupt()

void rb_threadptr_trap_interrupt ( rb_thread_t th)

Definition at line 432 of file thread.c.

References rb_threadptr_interrupt_common().

Referenced by rb_threadptr_check_signal().

◆ rb_threadptr_unlock_all_locking_mutexes()

void rb_threadptr_unlock_all_locking_mutexes ( rb_thread_t th)

◆ rb_uninterruptible()

VALUE rb_uninterruptible ( VALUE(*)(ANYARGS b_proc,
VALUE  data 
)

◆ rb_vm_backtrace_str_ary()

VALUE rb_vm_backtrace_str_ary ( rb_thread_t th,
long  lev,
long  n 
)

◆ rb_vm_gvl_destroy()

void rb_vm_gvl_destroy ( rb_vm_t vm)

Definition at line 342 of file thread.c.

References rb_vm_struct::thread_destruct_lock.

Referenced by ruby_vm_destruct().

◆ rb_vm_proc_local_ep()

const VALUE* rb_vm_proc_local_ep ( VALUE  proc)

Definition at line 558 of file thread.c.

References NULL, rb_vm_ep_local_ep(), and vm_proc_ep().

Referenced by rb_fiber_start(), thread_do_start(), and VM_STACK_ENV_WRITE().

◆ rb_wait_for_single_fd()

int rb_wait_for_single_fd ( int  fd,
int  events,
struct timeval tv 
)

◆ recursive_check()

static VALUE recursive_check ( VALUE  list,
VALUE  obj_id,
VALUE  paired_obj_id 
)
static

Definition at line 4522 of file thread.c.

References NIL_P, OBJ_ID_EQL, Qfalse, Qtrue, Qundef, rb_hash_lookup(), rb_hash_lookup2(), RB_TYPE_P, and T_HASH.

Referenced by exec_recursive().

◆ recursive_list_access()

static VALUE recursive_list_access ( VALUE  sym)
static

◆ recursive_pop()

static int recursive_pop ( VALUE  list,
VALUE  obj,
VALUE  paired_obj 
)
static

Definition at line 4587 of file thread.c.

References Qundef, rb_hash_delete_entry(), rb_hash_lookup2(), RB_TYPE_P, RHASH_EMPTY_P, and T_HASH.

Referenced by exec_recursive().

◆ recursive_push()

static void recursive_push ( VALUE  list,
VALUE  obj,
VALUE  paired_obj 
)
static

Definition at line 4557 of file thread.c.

References Qtrue, Qundef, rb_hash_aset(), rb_hash_lookup2(), rb_hash_new(), RB_TYPE_P, and T_HASH.

Referenced by exec_recursive().

◆ remove_from_join_list()

static VALUE remove_from_join_list ( VALUE  arg)
static

◆ reset_coverage_i()

static int reset_coverage_i ( st_data_t  key,
st_data_t  val,
st_data_t  dummy 
)
static

Definition at line 5018 of file thread.c.

References coverage(), rb_ary_clear(), and ST_CONTINUE.

Referenced by rb_reset_coverages().

◆ reset_unblock_function()

static void reset_unblock_function ( rb_thread_t th,
const struct rb_unblock_callback old 
)
static

Definition at line 400 of file thread.c.

References rb_thread_struct::interrupt_lock, and rb_thread_struct::unblock.

Referenced by blocking_region_end(), and rb_mutex_lock().

◆ retryable()

static int retryable ( int  e)
inlinestatic

Definition at line 3681 of file thread.c.

References FALSE, and TRUE.

Referenced by do_select(), and rb_thread_fd_select().

◆ ruby_kill()

void ruby_kill ( rb_pid_t  pid,
int  sig 
)

◆ ruby_native_thread_p()

int ruby_native_thread_p ( void  )

◆ ruby_thread_has_gvl_p()

int ruby_thread_has_gvl_p ( void  )

◆ ruby_thread_init_stack()

void ruby_thread_init_stack ( rb_thread_t th)

Definition at line 552 of file thread.c.

Referenced by Init_BareVM().

◆ ruby_thread_stack_overflow()

void ruby_thread_stack_overflow ( rb_thread_t th)

◆ select_single()

static VALUE select_single ( VALUE  ptr)
static

◆ select_single_cleanup()

static VALUE select_single_cleanup ( VALUE  ptr)
static

Definition at line 3980 of file thread.c.

References select_args::except, rb_fd_term, select_args::read, and select_args::write.

Referenced by rb_wait_for_single_fd().

◆ set_unblock_function()

static int set_unblock_function ( rb_thread_t th,
rb_unblock_function_t func,
void *  arg,
struct rb_unblock_callback old,
int  fail_if_interrupted 
)
static

◆ sleep_forever()

static void sleep_forever ( rb_thread_t th,
int  nodeadlock,
int  spurious_check 
)
static

◆ sleep_timeval()

static void sleep_timeval ( rb_thread_t th,
struct timeval  time,
int  spurious_check 
)
static

◆ sleep_wait_for_interrupt()

static void sleep_wait_for_interrupt ( rb_thread_t th,
double  sleepsec,
int  spurious_check 
)
static

Definition at line 1195 of file thread.c.

References double2timeval(), and sleep_timeval().

Referenced by thread_join_sleep().

◆ st_delete_wrap()

static void st_delete_wrap ( st_table table,
st_data_t  key 
)
inlinestatic

Definition at line 105 of file thread.c.

References st_delete.

Referenced by threadptr_local_aset().

◆ terminate_all()

static void terminate_all ( rb_vm_t vm,
const rb_thread_t main_thread 
)
static

◆ thgroup_add()

static VALUE thgroup_add ( VALUE  group,
VALUE  thread 
)
static

◆ thgroup_enclose()

static VALUE thgroup_enclose ( VALUE  group)
static

Definition at line 4273 of file thread.c.

References thgroup::enclosed, thgroup::group, and TypedData_Get_Struct.

Referenced by Init_Thread().

◆ thgroup_enclosed_p()

static VALUE thgroup_enclosed_p ( VALUE  group)
static

Definition at line 4292 of file thread.c.

References thgroup::enclosed, Qfalse, Qtrue, and TypedData_Get_Struct.

Referenced by Init_Thread().

◆ thgroup_list()

static VALUE thgroup_list ( VALUE  group)
static

◆ thgroup_memsize()

static size_t thgroup_memsize ( const void *  ptr)
static

Definition at line 4188 of file thread.c.

◆ thgroup_s_alloc()

static VALUE thgroup_s_alloc ( VALUE  klass)
static

Definition at line 4219 of file thread.c.

References thgroup::enclosed, thgroup::group, and TypedData_Make_Struct.

Referenced by Init_Thread().

◆ thread_cleanup_func()

static void thread_cleanup_func ( void *  th_ptr,
int  atfork 
)
static

◆ thread_cleanup_func_before_exec()

static void thread_cleanup_func_before_exec ( void *  th_ptr)
static

◆ thread_create_core()

static VALUE thread_create_core ( VALUE  thval,
VALUE  args,
VALUE(*)(ANYARGS fn 
)
static

◆ thread_do_start()

static void thread_do_start ( rb_thread_t th,
VALUE  args 
)
static

◆ thread_initialize()

static VALUE thread_initialize ( VALUE  thread,
VALUE  args 
)
static

◆ thread_join()

static VALUE thread_join ( rb_thread_t target_th,
double  delay 
)
static

◆ thread_join_m()

static VALUE thread_join_m ( int  argc,
VALUE argv,
VALUE  self 
)
static

Definition at line 981 of file thread.c.

References join_arg::delay, DELAY_INFTY, GetThreadPtr, NIL_P, rb_num2dbl(), rb_scan_args(), and thread_join().

Referenced by Init_Thread().

◆ thread_join_sleep()

static VALUE thread_join_sleep ( VALUE  arg)
static

◆ thread_keys_i()

static int thread_keys_i ( ID  key,
VALUE  value,
VALUE  ary 
)
static

Definition at line 3267 of file thread.c.

References ID2SYM, rb_ary_push(), and ST_CONTINUE.

Referenced by rb_thread_keys().

◆ thread_raise_m()

static VALUE thread_raise_m ( int  argc,
VALUE argv,
VALUE  self 
)
static

◆ thread_s_current()

static VALUE thread_s_current ( VALUE  klass)
static

Definition at line 2519 of file thread.c.

References rb_thread_current().

Referenced by Init_Thread().

◆ thread_s_new()

static VALUE thread_s_new ( int  argc,
VALUE argv,
VALUE  klass 
)
static

◆ thread_s_pass()

static VALUE thread_s_pass ( VALUE  klass)
static

Definition at line 1562 of file thread.c.

References Qnil, and rb_thread_schedule().

Referenced by Init_Thread().

◆ thread_shield_alloc()

static VALUE thread_shield_alloc ( VALUE  klass)
static

Definition at line 4378 of file thread.c.

References mutex_alloc(), and TypedData_Wrap_Struct.

Referenced by rb_thread_shield_new().

◆ thread_shield_get_mutex()

static VALUE thread_shield_get_mutex ( VALUE  self)
static

Definition at line 4443 of file thread.c.

References GetThreadShieldPtr, rb_eThreadError, and rb_raise().

Referenced by rb_thread_shield_destroy(), and rb_thread_shield_release().

◆ thread_shield_mark()

static void thread_shield_mark ( void *  ptr)
static

Definition at line 4366 of file thread.c.

References rb_gc_mark().

◆ thread_start()

static VALUE thread_start ( VALUE  klass,
VALUE  args 
)
static

Definition at line 796 of file thread.c.

References rb_thread_alloc(), and thread_create_core().

Referenced by Init_Thread().

◆ thread_start_func_2()

static int thread_start_func_2 ( rb_thread_t th,
VALUE stack_start,
VALUE register_stack_start 
)
static

◆ thread_status_name()

static const char* thread_status_name ( rb_thread_t th,
int  detail 
)
static

◆ thread_value()

static VALUE thread_value ( VALUE  self)
static

Definition at line 1012 of file thread.c.

References DELAY_INFTY, GetThreadPtr, waiting_fd::th, thread_join(), and rb_thread_struct::value.

Referenced by Init_Thread().

◆ threadptr_check_pending_interrupt_queue()

static void threadptr_check_pending_interrupt_queue ( rb_thread_t th)
static

Definition at line 1600 of file thread.c.

References rb_thread_struct::pending_interrupt_queue, rb_eThreadError, and rb_raise().

Referenced by rb_thread_kill(), and thread_raise_m().

◆ threadptr_get_interrupts()

static rb_atomic_t threadptr_get_interrupts ( rb_thread_t th)
inlinestatic

◆ threadptr_local_aref()

static VALUE threadptr_local_aref ( rb_thread_t th,
ID  id 
)
static

◆ threadptr_local_aset()

static VALUE threadptr_local_aset ( rb_thread_t th,
ID  id,
VALUE  val 
)
static

◆ threadptr_recursive_hash()

static VALUE threadptr_recursive_hash ( rb_thread_t th)
static

Definition at line 4475 of file thread.c.

References rb_thread_struct::local_storage_recursive_hash.

Referenced by recursive_list_access().

◆ threadptr_recursive_hash_set()

static void threadptr_recursive_hash_set ( rb_thread_t th,
VALUE  hash 
)
static

◆ timeofday()

static double timeofday ( void  )
static

◆ timer_thread_function()

static void timer_thread_function ( void *  arg)
static

◆ update_coverage()

static void update_coverage ( rb_event_flag_t  event,
VALUE  proc,
VALUE  self,
ID  id,
VALUE  klass 
)
static

◆ update_timeval()

static void update_timeval ( struct timeval timeout,
double  limit 
)
inlinestatic

Definition at line 3694 of file thread.c.

References timeofday(), timeval::tv_sec, and timeval::tv_usec.

◆ vm_check_ints_blocking()

static void vm_check_ints_blocking ( rb_thread_t th)
inlinestatic

◆ vm_living_thread_num()

static int vm_living_thread_num ( rb_vm_t vm)
static

Variable Documentation

◆ id_locals

ID id_locals
static

◆ rb_cThreadShield

VALUE rb_cThreadShield
static

Definition at line 78 of file thread.c.

Referenced by rb_thread_shield_new().

◆ recursive_key

ID recursive_key
static

Definition at line 3028 of file thread.c.

◆ sym_immediate

VALUE sym_immediate
static

◆ sym_never

VALUE sym_never
static

◆ sym_on_blocking

VALUE sym_on_blocking
static

◆ system_working

volatile int system_working = 1
static

Definition at line 96 of file thread.c.

Referenced by rb_thread_start_timer_thread().

◆ thgroup_data_type

const rb_data_type_t thgroup_data_type
static
Initial value:
= {
"thgroup",
}
#define RUBY_TYPED_FREE_IMMEDIATELY
Definition: ruby.h:1145
static size_t thgroup_memsize(const void *ptr)
Definition: thread.c:4188
#define RUBY_TYPED_DEFAULT_FREE
Definition: ruby.h:1141
#define NULL
Definition: _sdbm.c:102

Definition at line 4193 of file thread.c.

◆ thread_shield_data_type

const rb_data_type_t thread_shield_data_type
static
Initial value:
= {
"thread_shield",
}
#define RUBY_TYPED_FREE_IMMEDIATELY
Definition: ruby.h:1145
static void thread_shield_mark(void *ptr)
Definition: thread.c:4366

Definition at line 4371 of file thread.c.