@@ -420,7 +420,7 @@ VALUE IO_Event_Selector_EPoll_push(VALUE self, VALUE fiber)
420420
421421 IO_Event_Selector_ready_push (& selector -> backend , fiber );
422422
423- return Qnil ;
423+ return fiber ;
424424}
425425
426426VALUE IO_Event_Selector_EPoll_raise (int argc , VALUE * argv , VALUE self )
@@ -523,6 +523,8 @@ VALUE IO_Event_Selector_EPoll_process_wait(VALUE self, VALUE fiber, VALUE _pid,
523523struct io_wait_arguments {
524524 struct IO_Event_Selector_EPoll * selector ;
525525 struct IO_Event_Selector_EPoll_Waiting * waiting ;
526+
527+ VALUE io ;
526528};
527529
528530static
@@ -538,7 +540,7 @@ static
538540VALUE io_wait_transfer (VALUE _arguments ) {
539541 struct io_wait_arguments * arguments = (struct io_wait_arguments * )_arguments ;
540542
541- IO_Event_Selector_loop_yield (& arguments -> selector -> backend );
543+ IO_Event_Selector_loop_yield_io (& arguments -> selector -> backend , arguments -> io );
542544
543545 if (arguments -> waiting -> ready ) {
544546 return RB_INT2NUM (arguments -> waiting -> ready );
@@ -578,6 +580,7 @@ VALUE IO_Event_Selector_EPoll_io_wait(VALUE self, VALUE fiber, VALUE io, VALUE e
578580 struct io_wait_arguments io_wait_arguments = {
579581 .selector = selector ,
580582 .waiting = & waiting ,
583+ .io = io ,
581584 };
582585
583586 return rb_ensure (io_wait_transfer , (VALUE )& io_wait_arguments , io_wait_ensure , (VALUE )& io_wait_arguments );
0 commit comments