コード例 #1
0
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;
}
コード例 #2
0
ファイル: gc.c プロジェクト: 1nueve/MacRuby
const void *
rb_objc_release_ni(const void *addr)
{
    return rb_objc_release((void *)addr);
}