Open ashtneoi opened 2 years ago
Does this patch look like a reasonable fix? It fixes this particular case, at least.
diff --git a/lib/fiber_scheduler/selector.rb b/lib/fiber_scheduler/selector.rb
index 068b390..172f18c 100644
--- a/lib/fiber_scheduler/selector.rb
+++ b/lib/fiber_scheduler/selector.rb
@@ -206,7 +206,7 @@ class FiberScheduler
end
end
- duration = 0 if @ready.any?
+ duration = 0 if @ready.any? or (readable.empty? and writable.empty?)
readable, writable, _ = IO.select(readable, writable, nil, duration)
ready = Hash.new(0)
I'm using fiber_scheduler 0.13.0. Here's my code:
Sometimes
t.join 3
returns quickly, which is what I want to happen since threadt
almost immediately terminates. However, usuallyt.join 3
takes 3 seconds to return, which means something (the fiber scheduler, I think) preventedt.join
from waking up early.By adding debug logging to fiber_scheduler, I've figured out two things:
t.join 3
returns quickly, it's becauseFiberScheduler::Selector#select
calledIO.select([], [], nil, 0)
t.join 3
returns after 3 seconds, it's becauseFiberScheduler::Selector#select
calledIO.select([], [], nil, 3)
This feels like a bug in fiber_scheduler. Am I right?
(If it matters, I'm using Linux on x86_64, and I installed fiber_scheduler through Bundler.)