Skip to content

Conversation

@luke-gruber
Copy link

Ractors can send signals at any time, so the previous debug assertion can fail if a Ractor sends a signal.

require 'async/scheduler'

scheduler = Async::Scheduler.new
Fiber.set_scheduler(scheduler)

Signal.trap(:INT) do
end

q =  Thread::Queue.new

Thread.new do
  loop do
    Ractor.new do
      Process.kill(:INT, $$)
    end.value
  end
end

Fiber.schedule do
  Fiber.schedule do
    1.upto(1000000) do |i|
      sleep 0.01
      q.pop
      q.push(1)
      puts "1 iter push/pop"
    end
  end
  Fiber.schedule do
    1.upto(1000000) do |i|
      sleep 0.01
      q.push(i)
      q.pop
      puts "1 iter push/pop#2"
    end
  end
end

@luke-gruber luke-gruber force-pushed the fiber_scheduler_unblock_interrupt_ractors branch from b3ea7b1 to 62fa992 Compare September 17, 2025 13:55
Ractors can send signals at any time, so the previous debug assertion
can fail if a Ractor sends a signal.

```ruby
require 'async/scheduler'

scheduler = Async::Scheduler.new
Fiber.set_scheduler(scheduler)

Signal.trap(:INT) do
end

q =  Thread::Queue.new

Thread.new do
  loop do
    Ractor.new do
      Process.kill(:INT, $$)
    end.value
  end
end

Fiber.schedule do
  Fiber.schedule do
    1.upto(1000000) do |i|
      sleep 0.01
      q.pop
      q.push(1)
      puts "1 iter push/pop"
    end
  end
  Fiber.schedule do
    1.upto(1000000) do |i|
      sleep 0.01
      q.push(i)
      q.pop
      puts "1 iter push/pop#2"
    end
  end
end
```
@luke-gruber luke-gruber force-pushed the fiber_scheduler_unblock_interrupt_ractors branch from 62fa992 to 7f88b34 Compare September 17, 2025 14:17
@samuel-williams-shopify
Copy link

samuel-williams-shopify commented Sep 18, 2025

I worked on a PR (ruby#14588), but I think your implementation is probably better. I'm going to try your implementation (will apply a commit on top of my PR to track progress).

@samuel-williams-shopify

My PR is updated with this fix, I've tested and confirmed the fix according to the reproduction, and have created an upstream bug report. https://bugs.ruby-lang.org/issues/21610

@ioquatix
Copy link

Merged upstream.

@luke-gruber
Copy link
Author

Awesome, thanks! ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants