#include "gc.h"Go to the source code of this file.
Data Structures | |
| struct | cached_thread_entry |
Defines | |
| #define | RB_CONDATTR_CLOCK_MONOTONIC 1 |
| #define | USE_MONOTONIC_COND 0 |
| #define | NATIVE_MUTEX_LOCK_DEBUG 0 |
| #define | TIMET_MAX (~(time_t)0 <= 0 ? (time_t)((~(unsigned_time_t)0) >> 1) : (time_t)(~(unsigned_time_t)0)) |
| #define | native_cleanup_push pthread_cleanup_push |
| #define | native_cleanup_pop pthread_cleanup_pop |
| #define | native_thread_yield() ((void)0) |
| #define | USE_THREAD_CACHE 0 |
| #define | CHECK_ERR(expr) {int err = (expr); if (err) {rb_bug_errno(#expr, err);}} |
| #define | USE_NATIVE_THREAD_INIT 1 |
| #define | RUBY_STACK_MIN (RUBY_STACK_MIN_LIMIT) |
| #define | RUBY_STACK_SPACE |
| #define | ubf_select 0 |
| #define | TT_DEBUG 0 |
| #define | WRITE_CONST(fd, str) (void)(write((fd),(str),sizeof(str)-1)<0) |
| #define | CCP_READ_BUFF_SIZE 1024 |
| #define | TIME_QUANTUM_USEC (100 * 1000) |
Typedefs | |
| typedef unsigned long | unsigned_time_t |
Enumerations | |
| enum | { RUBY_STACK_MIN_LIMIT = 512 * 1024, RUBY_STACK_SPACE_LIMIT = 1024 * 1024 } |
Functions | |
| static void | native_mutex_lock (pthread_mutex_t *lock) |
| static void | native_mutex_unlock (pthread_mutex_t *lock) |
| static int | native_mutex_trylock (pthread_mutex_t *lock) |
| static void | native_mutex_initialize (pthread_mutex_t *lock) |
| static void | native_mutex_destroy (pthread_mutex_t *lock) |
| static void | native_cond_signal (rb_thread_cond_t *cond) |
| static void | native_cond_broadcast (rb_thread_cond_t *cond) |
| static void | native_cond_wait (rb_thread_cond_t *cond, pthread_mutex_t *mutex) |
| static void | native_cond_initialize (rb_thread_cond_t *cond, int flags) |
| static void | native_cond_destroy (rb_thread_cond_t *cond) |
| static void | gvl_acquire_common (rb_vm_t *vm) |
| static void | gvl_acquire (rb_vm_t *vm, rb_thread_t *th) |
| static void | gvl_release_common (rb_vm_t *vm) |
| static void | gvl_release (rb_vm_t *vm) |
| static void | gvl_yield (rb_vm_t *vm, rb_thread_t *th) |
| static void | gvl_init (rb_vm_t *vm) |
| static void | gvl_destroy (rb_vm_t *vm) |
| static void | gvl_atfork (rb_vm_t *vm) |
| static void | mutex_debug (const char *msg, pthread_mutex_t *lock) |
| static int | native_cond_timedwait (rb_thread_cond_t *cond, pthread_mutex_t *mutex, struct timespec *ts) |
| static struct timespec | native_cond_timeout (rb_thread_cond_t *cond, struct timespec timeout_rel) |
| static void | null_func (int i) |
| static rb_thread_t * | ruby_thread_from_native (void) |
| static int | ruby_thread_set_native (rb_thread_t *th) |
| static void | native_thread_init (rb_thread_t *th) |
| void | Init_native_thread (void) |
| static void | native_thread_destroy (rb_thread_t *th) |
| void | ruby_init_stack (volatile VALUE *addr) |
| static int | native_thread_init_stack (rb_thread_t *th) |
| static void * | thread_start_func_1 (void *th_ptr) |
| static int | use_cached_thread (rb_thread_t *th) |
| static int | native_thread_create (rb_thread_t *th) |
| static void | native_thread_join (pthread_t th) |
| static void | ubf_pthread_cond_signal (void *ptr) |
| static void | native_sleep (rb_thread_t *th, struct timeval *timeout_tv) |
| static void | add_signal_thread_list (rb_thread_t *th) |
| static void | remove_signal_thread_list (rb_thread_t *th) |
| static void | ping_signal_thread_list (void) |
| static int | check_signal_thread_list (void) |
| void | rb_thread_wakeup_timer_thread (void) |
| static void | consume_communication_pipe (void) |
| static void | close_communication_pipe (void) |
| static void * | thread_timer (void *p) |
| static void | rb_thread_create_timer_thread (void) |
| static int | native_stop_timer_thread (int close_anyway) |
| static void | native_reset_timer_thread (void) |
| int | rb_reserved_fd_p (int fd) |
Variables | |
| static pthread_t | timer_thread_id |
| static pthread_key_t | ruby_native_thread_key |
| struct { | |
| rb_thread_id_t id | |
| size_t stack_maxsize | |
| VALUE * stack_start | |
| } | native_main_thread |
| static int | timer_thread_pipe [2] = {-1, -1} |
| static int | timer_thread_pipe_owner_process |
| #define CCP_READ_BUFF_SIZE 1024 |
Referenced by consume_communication_pipe().
Definition at line 602 of file thread_pthread.c.
Referenced by native_thread_create(), and native_thread_init_stack().
| #define native_cleanup_pop pthread_cleanup_pop |
Definition at line 395 of file thread_pthread.c.
| #define native_cleanup_push pthread_cleanup_push |
Definition at line 394 of file thread_pthread.c.
| #define NATIVE_MUTEX_LOCK_DEBUG 0 |
Definition at line 165 of file thread_pthread.c.
Referenced by mutex_debug().
| #define native_thread_yield | ( | ) | ((void)0) |
Definition at line 399 of file thread_pthread.c.
Referenced by gvl_yield().
| #define RB_CONDATTR_CLOCK_MONOTONIC 1 |
Definition at line 43 of file thread_pthread.c.
Referenced by gvl_init(), mutex_alloc(), native_cond_initialize(), and native_thread_init().
| #define RUBY_STACK_MIN (RUBY_STACK_MIN_LIMIT) |
Definition at line 777 of file thread_pthread.c.
Referenced by native_thread_create().
| #define RUBY_STACK_SPACE |
Definition at line 779 of file thread_pthread.c.
Referenced by native_thread_create().
| #define TIME_QUANTUM_USEC (100 * 1000) |
Definition at line 1124 of file thread_pthread.c.
Referenced by rb_threadptr_execute_interrupts_common(), thread_timer(), and timer_thread_func().
| #define TIMET_MAX (~(time_t)0 <= 0 ? (time_t)((~(unsigned_time_t)0) >> 1) : (time_t)(~(unsigned_time_t)0)) |
Definition at line 347 of file thread_pthread.c.
Referenced by find_time_t(), init_leap_second_info(), native_cond_timeout(), rb_time_new(), timew_out_of_timet_range(), and wv2timet().
| #define TT_DEBUG 0 |
Definition at line 1056 of file thread_pthread.c.
Referenced by native_reset_timer_thread(), native_stop_timer_thread(), rb_thread_wakeup_timer_thread(), and thread_timer().
| #define ubf_select 0 |
Definition at line 1048 of file thread_pthread.c.
Referenced by do_select(), rb_thread_blocking_region(), rb_thread_blocking_region_begin(), and rb_thread_io_blocking_region().
| #define USE_MONOTONIC_COND 0 |
Definition at line 49 of file thread_pthread.c.
| #define USE_NATIVE_THREAD_INIT 1 |
Definition at line 636 of file thread_pthread.c.
| #define USE_THREAD_CACHE 0 |
Definition at line 460 of file thread_pthread.c.
| #define WRITE_CONST | ( | fd, | |||
| str | ) | (void)(write((fd),(str),sizeof(str)-1)<0) |
Definition at line 1058 of file thread_pthread.c.
| typedef unsigned long unsigned_time_t |
Definition at line 338 of file thread_pthread.c.
| anonymous enum |
Definition at line 764 of file thread_pthread.c.
| static void add_signal_thread_list | ( | rb_thread_t * | th | ) | [static] |
Definition at line 1046 of file thread_pthread.c.
| static int check_signal_thread_list | ( | void | ) | [static] |
Definition at line 1050 of file thread_pthread.c.
Referenced by thread_timer().
| static void close_communication_pipe | ( | void | ) | [static] |
Definition at line 1110 of file thread_pthread.c.
References errno, and rb_bug_errno().
Referenced by rb_thread_create_timer_thread().
| static void consume_communication_pipe | ( | void | ) | [static] |
Definition at line 1091 of file thread_pthread.c.
References CCP_READ_BUFF_SIZE, errno, rb_async_bug_errno(), and result.
Referenced by thread_timer().
| static void gvl_acquire | ( | rb_vm_t * | vm, | |
| rb_thread_t * | th | |||
| ) | [static] |
Definition at line 79 of file thread_pthread.c.
References rb_vm_struct::gvl, gvl_acquire_common(), rb_global_vm_lock_struct::lock, native_mutex_lock(), and native_mutex_unlock().
Referenced by blocking_region_end(), gvl_atfork(), Init_Thread(), and thread_start_func_2().
| static void gvl_acquire_common | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 53 of file thread_pthread.c.
References rb_global_vm_lock_struct::acquired, rb_global_vm_lock_struct::cond, rb_vm_struct::gvl, rb_global_vm_lock_struct::lock, native_cond_signal(), native_cond_wait(), rb_global_vm_lock_struct::need_yield, rb_thread_wakeup_timer_thread(), rb_global_vm_lock_struct::switch_cond, and rb_global_vm_lock_struct::waiting.
Referenced by gvl_acquire(), and gvl_yield().
| static void gvl_atfork | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 159 of file thread_pthread.c.
References GET_THREAD, gvl_acquire(), and gvl_init().
Referenced by rb_thread_atfork_internal().
| static void gvl_destroy | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 150 of file thread_pthread.c.
References rb_global_vm_lock_struct::cond, rb_vm_struct::gvl, rb_global_vm_lock_struct::lock, native_cond_destroy(), native_mutex_destroy(), rb_global_vm_lock_struct::switch_cond, and rb_global_vm_lock_struct::switch_wait_cond.
Referenced by rb_vm_gvl_destroy().
| static void gvl_init | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 137 of file thread_pthread.c.
References rb_global_vm_lock_struct::acquired, rb_global_vm_lock_struct::cond, rb_vm_struct::gvl, rb_global_vm_lock_struct::lock, native_cond_initialize(), native_mutex_initialize(), rb_global_vm_lock_struct::need_yield, RB_CONDATTR_CLOCK_MONOTONIC, rb_global_vm_lock_struct::switch_cond, rb_global_vm_lock_struct::switch_wait_cond, rb_global_vm_lock_struct::wait_yield, and rb_global_vm_lock_struct::waiting.
Referenced by gvl_atfork(), and Init_Thread().
| static void gvl_release | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 95 of file thread_pthread.c.
References rb_vm_struct::gvl, gvl_release_common(), rb_global_vm_lock_struct::lock, native_mutex_lock(), and native_mutex_unlock().
Referenced by rb_vm_gvl_destroy().
| static void gvl_release_common | ( | rb_vm_t * | vm | ) | [static] |
Definition at line 87 of file thread_pthread.c.
References rb_global_vm_lock_struct::acquired, rb_global_vm_lock_struct::cond, rb_vm_struct::gvl, native_cond_signal(), and rb_global_vm_lock_struct::waiting.
Referenced by gvl_release(), and gvl_yield().
| static void gvl_yield | ( | rb_vm_t * | vm, | |
| rb_thread_t * | th | |||
| ) | [static] |
Definition at line 103 of file thread_pthread.c.
References rb_vm_struct::gvl, gvl_acquire_common(), gvl_release_common(), rb_global_vm_lock_struct::lock, native_cond_broadcast(), native_cond_wait(), native_mutex_lock(), native_mutex_unlock(), rb_global_vm_lock_struct::need_yield, rb_global_vm_lock_struct::switch_cond, rb_global_vm_lock_struct::switch_wait_cond, UNLIKELY, rb_global_vm_lock_struct::wait_yield, and rb_global_vm_lock_struct::waiting.
Referenced by rb_thread_schedule_limits().
| void Init_native_thread | ( | void | ) |
Definition at line 434 of file thread_pthread.c.
References GET_THREAD, native_mutex_initialize(), native_thread_init(), NULL, null_func(), posix_signal(), ruby_native_thread_key, and rb_thread_struct::thread_id.
Referenced by Init_BareVM().
| static void mutex_debug | ( | const char * | msg, | |
| pthread_mutex_t * | lock | |||
| ) | [static] |
Definition at line 168 of file thread_pthread.c.
References EXIT_FAILURE, and NATIVE_MUTEX_LOCK_DEBUG.
Referenced by native_mutex_destroy(), native_mutex_initialize(), native_mutex_lock(), native_mutex_trylock(), and native_mutex_unlock().
| static void native_cond_broadcast | ( | rb_thread_cond_t * | cond | ) | [static] |
Definition at line 295 of file thread_pthread.c.
References rb_thread_cond_struct::cond, and rb_bug_errno().
Referenced by gvl_yield(), and lock_interrupt().
| static void native_cond_destroy | ( | rb_thread_cond_t * | cond | ) | [static] |
Definition at line 264 of file thread_pthread.c.
References rb_thread_cond_struct::cond, and rb_bug_errno().
Referenced by gvl_destroy(), mutex_free(), and native_thread_destroy().
| static void native_cond_initialize | ( | rb_thread_cond_t * | cond, | |
| int | flags | |||
| ) | [static] |
Definition at line 237 of file thread_pthread.c.
References rb_thread_cond_struct::cond, rb_bug_errno(), and RB_CONDATTR_CLOCK_MONOTONIC.
Referenced by gvl_init(), mutex_alloc(), and native_thread_init().
| static void native_cond_signal | ( | rb_thread_cond_t * | cond | ) | [static] |
Definition at line 283 of file thread_pthread.c.
References rb_thread_cond_struct::cond, and rb_bug_errno().
Referenced by gvl_acquire_common(), gvl_release_common(), rb_mutex_unlock_th(), ubf_pthread_cond_signal(), and use_cached_thread().
| static int native_cond_timedwait | ( | rb_thread_cond_t * | cond, | |
| pthread_mutex_t * | mutex, | |||
| struct timespec * | ts | |||
| ) | [static] |
Definition at line 316 of file thread_pthread.c.
References rb_thread_cond_struct::cond, ETIMEDOUT, and rb_bug_errno().
Referenced by lock_func(), and native_sleep().
| static struct timespec native_cond_timeout | ( | rb_thread_cond_t * | cond, | |
| struct timespec | timeout_rel | |||
| ) | [static, read] |
Definition at line 350 of file thread_pthread.c.
References gettimeofday(), rb_bug(), rb_sys_fail, TIMET_MAX, timespec::tv_nsec, timeval::tv_sec, timespec::tv_sec, and timeval::tv_usec.
Referenced by lock_func(), and native_sleep().
| static void native_cond_wait | ( | rb_thread_cond_t * | cond, | |
| pthread_mutex_t * | mutex | |||
| ) | [static] |
Definition at line 307 of file thread_pthread.c.
References rb_thread_cond_struct::cond, and rb_bug_errno().
Referenced by gvl_acquire_common(), gvl_yield(), lock_func(), and native_sleep().
| static void native_mutex_destroy | ( | pthread_mutex_t * | lock | ) | [static] |
Definition at line 227 of file thread_pthread.c.
References mutex_debug(), and rb_bug_errno().
Referenced by gvl_destroy(), mutex_free(), rb_thread_lock_destroy(), and thread_cleanup_func().
| static void native_mutex_initialize | ( | pthread_mutex_t * | lock | ) | [static] |
Definition at line 217 of file thread_pthread.c.
References mutex_debug(), and rb_bug_errno().
Referenced by gvl_init(), Init_native_thread(), Init_Thread(), mutex_alloc(), and thread_create_core().
| static void native_mutex_lock | ( | pthread_mutex_t * | lock | ) | [static] |
Definition at line 181 of file thread_pthread.c.
References mutex_debug(), and rb_bug_errno().
Referenced by check_deadlock_i(), gvl_acquire(), gvl_release(), gvl_yield(), lock_interrupt(), rb_mutex_lock(), rb_mutex_trylock(), rb_mutex_unlock_th(), rb_threadptr_interrupt(), reset_unblock_function(), set_unblock_function(), and thread_fd_close_i().
| static int native_mutex_trylock | ( | pthread_mutex_t * | lock | ) | [inline, static] |
Definition at line 201 of file thread_pthread.c.
References mutex_debug(), and rb_bug_errno().
Referenced by Init_Thread().
| static void native_mutex_unlock | ( | pthread_mutex_t * | lock | ) | [static] |
Definition at line 191 of file thread_pthread.c.
References mutex_debug(), and rb_bug_errno().
Referenced by check_deadlock_i(), gvl_acquire(), gvl_release(), gvl_yield(), lock_interrupt(), rb_mutex_lock(), rb_mutex_trylock(), rb_mutex_unlock_th(), rb_thread_lock_unlock(), rb_threadptr_interrupt(), reset_unblock_function(), set_unblock_function(), and thread_fd_close_i().
| static void native_reset_timer_thread | ( | void | ) | [static] |
Definition at line 1288 of file thread_pthread.c.
References TT_DEBUG.
Referenced by rb_thread_reset_timer_thread(), and rb_thread_stop_timer_thread().
| static void native_sleep | ( | rb_thread_t * | th, | |
| struct timeval * | timeout_tv | |||
| ) | [static] |
Definition at line 869 of file thread_pthread.c.
References rb_unblock_callback::arg, rb_unblock_callback::func, GVL_UNLOCK_BEGIN, GVL_UNLOCK_END, rb_thread_struct::interrupt_lock, native_cond_timedwait(), native_cond_timeout(), native_cond_wait(), rb_thread_struct::native_thread_data, RUBY_VM_INTERRUPTED, native_thread_data_struct::sleep_cond, thread_debug, timespec::tv_nsec, timeval::tv_sec, timespec::tv_sec, timeval::tv_usec, ubf_pthread_cond_signal(), and rb_thread_struct::unblock.
Referenced by sleep_forever(), and sleep_timeval().
| static int native_stop_timer_thread | ( | int | close_anyway | ) | [static] |
Definition at line 1259 of file thread_pthread.c.
References native_thread_join(), rb_thread_wakeup_timer_thread(), system_working, timer_thread_id, and TT_DEBUG.
Referenced by rb_thread_stop_timer_thread().
| static int native_thread_create | ( | rb_thread_t * | th | ) | [static] |
Definition at line 783 of file thread_pthread.c.
References CHECK_ERR, err, rb_thread_struct::machine_stack_maxsize, RUBY_STACK_MIN, RUBY_STACK_SPACE, thread_debug, rb_thread_struct::thread_id, thread_start_func_1(), and use_cached_thread().
Referenced by thread_create_core().
| static void native_thread_destroy | ( | rb_thread_t * | th | ) | [static] |
Definition at line 455 of file thread_pthread.c.
References native_cond_destroy(), rb_thread_struct::native_thread_data, and native_thread_data_struct::sleep_cond.
Referenced by thread_cleanup_func().
| static void native_thread_init | ( | rb_thread_t * | th | ) | [static] |
Definition at line 448 of file thread_pthread.c.
References native_cond_initialize(), rb_thread_struct::native_thread_data, RB_CONDATTR_CLOCK_MONOTONIC, ruby_thread_set_native(), and native_thread_data_struct::sleep_cond.
Referenced by Init_native_thread(), and thread_start_func_1().
| static int native_thread_init_stack | ( | rb_thread_t * | th | ) | [static] |
Definition at line 606 of file thread_pthread.c.
References rb_thread_struct::machine_stack_maxsize, rb_thread_struct::machine_stack_start, native_main_thread, rb_eNotImpError, and rb_raise().
Referenced by ruby_thread_init_stack(), and thread_start_func_1().
| static void native_thread_join | ( | pthread_t | th | ) | [static] |
Definition at line 821 of file thread_pthread.c.
References err, rb_eThreadError, and rb_raise().
Referenced by native_stop_timer_thread().
| static void null_func | ( | int | i | ) | [static] |
Definition at line 414 of file thread_pthread.c.
Referenced by Init_native_thread().
| static void ping_signal_thread_list | ( | void | ) | [static] |
Definition at line 1049 of file thread_pthread.c.
Referenced by thread_timer().
| int rb_reserved_fd_p | ( | int | fd | ) |
Definition at line 1329 of file thread_pthread.c.
| static void rb_thread_create_timer_thread | ( | void | ) | [static] |
Definition at line 1186 of file thread_pthread.c.
References close_communication_pipe(), err, errno, EXIT_FAILURE, F_SETFL, fcntl(), GET_VM, O_NONBLOCK, rb_bug(), rb_bug_errno(), rb_disable_interrupt(), rb_enable_interrupt(), rb_update_max_fd(), THREAD_DEBUG, thread_timer(), and timer_thread_id.
Referenced by Init_Thread(), and rb_thread_start_timer_thread().
| void rb_thread_wakeup_timer_thread | ( | void | ) |
Definition at line 1062 of file thread_pthread.c.
Referenced by gvl_acquire_common(), native_stop_timer_thread(), and sighandler().
| static void remove_signal_thread_list | ( | rb_thread_t * | th | ) | [static] |
Definition at line 1047 of file thread_pthread.c.
| void ruby_init_stack | ( | volatile VALUE * | addr | ) |
Definition at line 560 of file thread_pthread.c.
References getrlimit(), native_main_thread, STACK_DIR_UPPER, STACK_GROW_DIR_DETECTION, and STACK_UPPER.
| static rb_thread_t* ruby_thread_from_native | ( | void | ) | [static] |
Definition at line 420 of file thread_pthread.c.
References ruby_native_thread_key.
Referenced by rb_thread_call_with_gvl(), ruby_native_thread_p(), and ruby_thread_has_gvl_p().
| static int ruby_thread_set_native | ( | rb_thread_t * | th | ) | [static] |
Definition at line 426 of file thread_pthread.c.
References ruby_native_thread_key.
Referenced by native_thread_init(), and thread_start_func_2().
| static void* thread_start_func_1 | ( | void * | th_ptr | ) | [static] |
Definition at line 640 of file thread_pthread.c.
References rb_thread_struct::machine_stack_start, native_thread_init(), native_thread_init_stack(), stack_start, rb_thread_struct::thread_id, thread_start(), and thread_start_func_2.
Referenced by native_thread_create().
| static void* thread_timer | ( | void * | p | ) | [static] |
Definition at line 1127 of file thread_pthread.c.
References check_signal_thread_list(), consume_communication_pipe(), errno, FD_SET, NULL, ping_signal_thread_list(), rb_async_bug_errno(), result, system_working, TIME_QUANTUM_USEC, timer_thread_function(), TT_DEBUG, timeval::tv_sec, timeval::tv_usec, rb_global_vm_lock_struct::waiting, and WRITE_CONST.
Referenced by rb_thread_create_timer_thread().
| static void ubf_pthread_cond_signal | ( | void * | ptr | ) | [static] |
Definition at line 861 of file thread_pthread.c.
References native_cond_signal(), and thread_debug.
Referenced by native_sleep().
| static int use_cached_thread | ( | rb_thread_t * | th | ) | [static] |
Definition at line 739 of file thread_pthread.c.
References cached_thread_entry::cond, native_cond_signal(), cached_thread_entry::next, result, and cached_thread_entry::th_area.
Referenced by native_thread_create().
Definition at line 546 of file thread_pthread.c.
struct { ... } native_main_thread [static] |
Referenced by native_thread_init_stack(), and ruby_init_stack().
pthread_key_t ruby_native_thread_key [static] |
Definition at line 411 of file thread_pthread.c.
Referenced by Init_native_thread(), ruby_thread_from_native(), and ruby_thread_set_native().
| size_t stack_maxsize |
Definition at line 547 of file thread_pthread.c.
Definition at line 548 of file thread_pthread.c.
Referenced by mark_current_machine_context(), rb_gc_mark_machine_stack(), and thread_start_func_1().
pthread_t timer_thread_id [static] |
Definition at line 41 of file thread_pthread.c.
Referenced by native_stop_timer_thread(), rb_thread_create_timer_thread(), and rb_thread_stop_timer_thread().
int timer_thread_pipe[2] = {-1, -1} [static] |
Definition at line 1053 of file thread_pthread.c.
int timer_thread_pipe_owner_process [static] |
Definition at line 1054 of file thread_pthread.c.
1.6.1