diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2021-02-11 19:17:54 +1300 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2021-03-30 18:38:42 +1300 |
commit | 4c53dc970bf82e4c5fb237be4b2404bcb07496d2 (patch) | |
tree | 8df121b7255da00297a2dbd9c126302abcade685 /test/fiber/scheduler.rb | |
parent | 93753d7ee738475f7445e5cfc405756a4fb7f850 (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.rb | 28 |
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 |