bruno- / fiber_scheduler

Ruby's missing Fiber Scheduler implementation.
MIT License
120 stars 3 forks source link

Add offset argument to io_read and io_write #5

Closed aalin closed 1 year ago

aalin commented 1 year ago

This makes fiber_scheduler work with Ruby 3.2.0

The offset argument was added in https://github.com/ruby/ruby/pull/6525

Related changes in the async gem:

https://github.com/socketry/async/commit/a932d6adde05d01b770678622c499189cc2957b9 https://github.com/socketry/async/commit/c6c739359f3cf81ac06509c1d3fd9ef194787894

With fiber_scheduler 0.13.0 and Ruby 3.2.0 I get:

  2) FiberScheduler with default setup socket #io_read #io_write UNIXSocket.pair writes and reads a message
     Failure/Error:
       def io_read(io, buffer, length)
         @selector.io_read(Fiber.current, io, buffer, length)
       end

     ArgumentError:
       wrong number of arguments (given 4, expected 3)
     Shared Example Group: FiberSchedulerSpec::SocketIO called from ./vendor/bundle/ruby/3.2.0/gems/fiber_scheduler_spec-0.10.0/lib/fiber_scheduler_spec.rb:21
     Shared Example Group: FiberSchedulerSpec called from ./spec/fiber_scheduler/fiber_scheduler_spec.rb:5
     # ./lib/fiber_scheduler.rb:175:in `io_read'
     # ./vendor/bundle/ruby/3.2.0/gems/fiber_scheduler_spec-0.10.0/lib/fiber_scheduler_spec/socket_io.rb:24:in `read'
     # ./vendor/bundle/ruby/3.2.0/gems/fiber_scheduler_spec-0.10.0/lib/fiber_scheduler_spec/socket_io.rb:24:in `block in operations'
     # ./lib/fiber_scheduler.rb:240:in `block in fiber'

However, even after this change specs are still failing.

To make all tests pass, I had to open ./vendor/bundle/ruby/3.2.0/gems/fiber_scheduler_spec-0.10.0/lib/fiber_scheduler_spec/socket_io.rb and change line 42 from .to receive(:io_read).once to .to receive(:io_read).twice.

I don't know why that happens, but I assume that if I fix it, it will fail with earlier Ruby versions.

bruno- commented 1 year ago

Thanks!

rmosolgo commented 1 year ago

I just ran into this too, trying to get fiber_scheduler to work with GraphQL-Ruby (https://github.com/rmosolgo/graphql-ruby/pull/4322). Would you mind cutting a release with this patch? Thanks!

Well, it looks like it still segfaults :S https://github.com/rmosolgo/graphql-ruby/actions/runs/4146930658/jobs/7173203105