ext/gyro/thread.c in polyphony-0.32 vs ext/gyro/thread.c in polyphony-0.33

- old
+ new

@@ -5,11 +5,14 @@ static ID ID_create_event_selector; static ID ID_empty; static ID ID_fiber_ref_count; static ID ID_ivar_event_selector_proc; static ID ID_ivar_event_selector; +static ID ID_ivar_join_wait_queue; static ID ID_ivar_main_fiber; +static ID ID_ivar_result; +static ID ID_ivar_terminated; static ID ID_pop; static ID ID_push; static ID ID_run_queue; // static ID ID_run_queue_head; // static ID ID_run_queue_tail; @@ -245,25 +248,10 @@ } return self; } -VALUE Thread_join_perform(VALUE self) { - if (!RTEST(rb_funcall(self, rb_intern("alive?"), 0))) { - return self; - } - - VALUE async = rb_funcall(cGyro_Async, ID_new, 0); - VALUE wait_queue = rb_ivar_get(self, rb_intern("@join_wait_queue")); - - Gyro_Queue_push(wait_queue, async); - - VALUE ret = Gyro_Async_await(async); - RB_GC_GUARD(async); - return ret; -} - void Init_Thread() { cQueue = rb_const_get(rb_cObject, rb_intern("Queue")); rb_define_singleton_method(rb_cThread, "event_selector=", Thread_event_selector_set_proc, 1); rb_define_singleton_method(rb_cThread, "create_event_selector", Thread_create_event_selector, 1); @@ -280,17 +268,18 @@ rb_define_method(rb_cThread, "schedule_fiber", Thread_schedule_fiber, 2); rb_define_method(rb_cThread, "schedule_fiber_with_priority", Thread_schedule_fiber_with_priority, 2); rb_define_method(rb_cThread, "switch_fiber", Thread_switch_fiber, 0); - rb_define_method(rb_cThread, "join_perform", Thread_join_perform, 0); - ID_create_event_selector = rb_intern("create_event_selector"); ID_empty = rb_intern("empty?"); ID_fiber_ref_count = rb_intern("fiber_ref_count"); ID_ivar_event_selector = rb_intern("@event_selector"); ID_ivar_event_selector_proc = rb_intern("@event_selector_proc"); + ID_ivar_join_wait_queue = rb_intern("@join_wait_queue"); ID_ivar_main_fiber = rb_intern("@main_fiber"); + ID_ivar_result = rb_intern("@result"); + ID_ivar_terminated = rb_intern("@terminated"); ID_pop = rb_intern("pop"); ID_push = rb_intern("push"); ID_run_queue = rb_intern("run_queue"); ID_runnable_next = rb_intern("runnable_next"); ID_stop = rb_intern("stop");