static void * thread_start_func_1(void *th_ptr) { #if WITH_OBJC rb_objc_gc_register_thread(); rb_objc_release((void *)th_ptr); #endif #if USE_THREAD_CACHE thread_start: #endif { rb_thread_t *th = th_ptr; VALUE stack_start; /* run */ thread_start_func_2(th, &stack_start, rb_ia64_bsp()); } #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 #if WITH_OBJC rb_objc_gc_unregister_thread(); #endif return 0; }
const void * rb_objc_release_ni(const void *addr) { return rb_objc_release((void *)addr); }