summaryrefslogtreecommitdiff
path: root/test/fiber/scheduler.rb
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-02-11 19:17:54 +1300
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-03-30 18:38:42 +1300
commit4c53dc970bf82e4c5fb237be4b2404bcb07496d2 (patch)
tree8df121b7255da00297a2dbd9c126302abcade685 /test/fiber/scheduler.rb
parent93753d7ee738475f7445e5cfc405756a4fb7f850 (diff)
Add hook for `Timeout.timeout`.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4173
Diffstat (limited to 'test/fiber/scheduler.rb')
-rw-r--r--test/fiber/scheduler.rb28
1 files changed, 24 insertions, 4 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb
index f2fb304e19..8a8585fcbe 100644
--- a/test/fiber/scheduler.rb
+++ b/test/fiber/scheduler.rb
@@ -81,10 +81,12 @@ class Scheduler
waiting, @waiting = @waiting, {}
waiting.each do |fiber, timeout|
- if timeout <= time
- fiber.resume
- else
- @waiting[fiber] = timeout
+ if fiber.alive?
+ if timeout <= time
+ fiber.resume
+ else
+ @waiting[fiber] = timeout
+ end
end
end
end
@@ -127,6 +129,24 @@ class Scheduler
Process.clock_gettime(Process::CLOCK_MONOTONIC)
end
+ def timeout_raise(duration, klass, message, &block)
+ fiber = Fiber.current
+
+ self.fiber do
+ sleep(duration)
+
+ if fiber&.alive?
+ fiber.raise(klass, message)
+ end
+ end
+
+ begin
+ yield(duration)
+ ensure
+ fiber = nil
+ end
+ end
+
def process_wait(pid, flags)
# $stderr.puts [__method__, pid, flags, Fiber.current].inspect