@@ 130,33 130,19 @@ module EventMachine
def call; end
- # Inspired by bruno-/fiber_scheduler
class Fallback
def initialize(fiber, pid, flags)
@fiber = fiber
@pid = pid
@flags = flags
- @reader, @writer = IO.pipe
- end
-
- def thread
- @thread ||= Thread.new do
- Process::Status.wait(@pid, @flags)
- ensure
- @writer.close
- end
end
def call
- thread
- Fiber.schedule do
- Fiber.scheduler&.io_wait(@reader, IO::READABLE)
- @fiber.resume(thread.value)
- ensure
- @reader.close
- @writer.close
- @thread&.kill
- end
+ EM.defer(
+ -> { Process::Status.wait(@pid, @flags) },
+ @fiber.method(:resume),
+ @fiber.method(:raise)
+ )
end
end
end