static void * thread_start_func_1(void *th_ptr) { #if USE_THREAD_CACHE thread_start: #endif { rb_thread_t *th = th_ptr; VALUE stack_start; #ifndef __CYGWIN__ native_thread_init_stack(th); #endif native_thread_init(th); /* run */ thread_start_func_2(th, &stack_start, rb_ia64_bsp()); } #if USE_THREAD_CACHE if (1) { /* cache thread */ rb_thread_t *th; if ((th = register_cached_thread_and_wait()) != 0) { th_ptr = (void *)th; th->thread_id = pthread_self(); goto thread_start; } } #endif return 0; }
void Init_native_thread(void) { rb_thread_t *th = GET_THREAD(); pthread_key_create(&ruby_native_thread_key, NULL); th->thread_id = pthread_self(); native_thread_init(th); native_mutex_initialize(&signal_thread_list_lock); posix_signal(SIGVTALRM, null_func); }
void Init_native_thread(void) { rb_thread_t *th = GET_THREAD(); pthread_key_create(&ruby_native_thread_key, NULL); th->thread_id = pthread_self(); native_thread_init(th); #ifdef USE_SIGNAL_THREAD_LIST native_mutex_initialize(&signal_thread_list_lock); #endif #ifndef __native_client__ posix_signal(SIGVTALRM, null_func); #endif }
static void * thread_start_func_1(void *th_ptr) { scribe_end(); #if USE_THREAD_CACHE thread_start: #endif { rb_thread_t *th = th_ptr; #if !defined USE_NATIVE_THREAD_INIT VALUE stack_start; #endif #if defined USE_NATIVE_THREAD_INIT native_thread_init_stack(th); #endif native_thread_init(th); /* run */ #if defined USE_NATIVE_THREAD_INIT thread_start_func_2(th, th->machine_stack_start, rb_ia64_bsp()); #else thread_start_func_2(th, &stack_start, rb_ia64_bsp()); #endif } #if USE_THREAD_CACHE if (1) { /* cache thread */ rb_thread_t *th; if ((th = register_cached_thread_and_wait()) != 0) { th_ptr = (void *)th; th->thread_id = pthread_self(); goto thread_start; } } #endif scribe_begin(); return 0; }