summaryrefslogtreecommitdiff
path: root/test/fiber
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2024-04-07 19:57:15 +1200
committerGitHub <noreply@github.com>2024-04-07 19:57:15 +1200
commitbdb1fc1e5bd09f23860d0f3aced10da51d2c9867 (patch)
tree8e5e30f0c21502e6a9898a4292d9ec163920a3ff /test/fiber
parented4d03ea41fa48e2d83f5956796f47c32fbe27ab (diff)
Prefer to use `Fiber#transfer` in scheduler implementation. (#10479)
Diffstat (limited to 'test/fiber')
-rw-r--r--test/fiber/scheduler.rb22
-rw-r--r--test/fiber/test_mutex.rb2
2 files changed, 15 insertions, 9 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb
index 5090271db1..3926226ca3 100644
--- a/test/fiber/scheduler.rb
+++ b/test/fiber/scheduler.rb
@@ -27,7 +27,9 @@ class Scheduler
Warning[:experimental] = experimental
end
- def initialize
+ def initialize(fiber = Fiber.current)
+ @fiber = fiber
+
@readable = {}
@writable = {}
@waiting = {}
@@ -45,6 +47,10 @@ class Scheduler
attr :writable
attr :waiting
+ def transfer
+ @fiber.transfer
+ end
+
def next_timeout
_fiber, timeout = @waiting.min_by{|key, value| value}
@@ -88,7 +94,7 @@ class Scheduler
end
selected.each do |fiber, events|
- fiber.resume(events)
+ fiber.transfer(events)
end
if @waiting.any?
@@ -98,7 +104,7 @@ class Scheduler
waiting.each do |fiber, timeout|
if fiber.alive?
if timeout <= time
- fiber.resume
+ fiber.transfer
else
@waiting[fiber] = timeout
end
@@ -114,7 +120,7 @@ class Scheduler
end
ready.each do |fiber|
- fiber.resume
+ fiber.transfer
end
end
end
@@ -217,7 +223,7 @@ class Scheduler
@waiting[fiber] = current_time + duration
end
- Fiber.yield
+ @fiber.transfer
ensure
@waiting.delete(fiber) if duration
@readable.delete(io) if readable
@@ -254,7 +260,7 @@ class Scheduler
if timeout
@waiting[fiber] = current_time + timeout
begin
- Fiber.yield
+ @fiber.transfer
ensure
# Remove from @waiting in the case #unblock was called before the timeout expired:
@waiting.delete(fiber)
@@ -262,7 +268,7 @@ class Scheduler
else
@blocking[fiber] = true
begin
- Fiber.yield
+ @fiber.transfer
ensure
@blocking.delete(fiber)
end
@@ -290,7 +296,7 @@ class Scheduler
def fiber(&block)
fiber = Fiber.new(blocking: false, &block)
- fiber.resume
+ fiber.transfer
return fiber
end
diff --git a/test/fiber/test_mutex.rb b/test/fiber/test_mutex.rb
index 449c49f38b..2cee2cc235 100644
--- a/test/fiber/test_mutex.rb
+++ b/test/fiber/test_mutex.rb
@@ -207,7 +207,7 @@ class TestFiberMutex < Test::Unit::TestCase
Fiber.schedule do
mutex.synchronize do
puts 'in synchronize'
- Fiber.yield
+ scheduler.transfer
end
end