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");