Skip to content

Commit f9164a2

Browse files
Introduce IO::Event::WorkerPool for blocking operation execution.
1 parent 4848faf commit f9164a2

7 files changed

Lines changed: 729 additions & 2 deletions

File tree

ext/extconf.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
append_cflags(["-DRUBY_DEBUG", "-O0"])
2424
end
2525

26-
$srcs = ["io/event/event.c", "io/event/time.c", "io/event/fiber.c", "io/event/selector/selector.c"]
26+
$srcs = ["io/event/event.c", "io/event/time.c", "io/event/fiber.c", "io/event/worker_pool.c", "io/event/selector/selector.c"]
2727
$VPATH << "$(srcdir)/io/event"
2828
$VPATH << "$(srcdir)/io/event/selector"
2929

@@ -56,6 +56,11 @@
5656
have_func("&rb_fiber_raise")
5757
have_func("epoll_pwait2")
5858

59+
# Feature detection for blocking operation support
60+
have_func("rb_fiber_scheduler_blocking_operation_extract")
61+
have_func("rb_fiber_scheduler_blocking_operation_execute")
62+
have_func("rb_fiber_scheduler_blocking_operation_cancel")
63+
5964
have_header("ruby/io/buffer.h")
6065

6166
if ENV.key?("RUBY_SANITIZE")

ext/io/event/event.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "event.h"
55
#include "fiber.h"
6+
#include "worker_pool.h"
67
#include "selector/selector.h"
78

89
void Init_IO_Event(void)
@@ -14,6 +15,7 @@ void Init_IO_Event(void)
1415
VALUE IO_Event = rb_define_module_under(rb_cIO, "Event");
1516

1617
Init_IO_Event_Fiber(IO_Event);
18+
Init_IO_Event_WorkerPool(IO_Event);
1719

1820
VALUE IO_Event_Selector = rb_define_module_under(IO_Event, "Selector");
1921
Init_IO_Event_Selector(IO_Event_Selector);

ext/io/event/fiber.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ VALUE IO_Event_Fiber_raise(VALUE fiber, int argc, VALUE *argv) {
3535
#ifndef HAVE_RB_FIBER_CURRENT
3636
static ID id_current;
3737

38-
static VALUE IO_Event_Fiber_current(void) {
38+
VALUE IO_Event_Fiber_current(void) {
3939
return rb_funcall(rb_cFiber, id_current, 0);
4040
}
4141
#endif

0 commit comments

Comments
 (0)