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; void *p = rho_nativethread_start(); /* run */ thread_start_func_2(th, &stack_start, rb_ia64_bsp()); rho_nativethread_end(p); } #if USE_THREAD_CACHE if (1) { /* cache thread */ rb_thread_t *th; static rb_thread_t *register_cached_thread_and_wait(void); if ((th = register_cached_thread_and_wait()) != 0) { th_ptr = (void *)th; th->thread_id = pthread_self(); goto thread_start; } } #endif return 0; }
void *runProc(void *pv) { IRhoRunnable *p = static_cast<IRhoRunnable *>(pv); void *pData = rho_nativethread_start(); p->runObject(); rho_nativethread_end(pData); return 0; }