diff options
author | Benoit Daloze <eregontp@gmail.com> | 2020-09-21 16:04:20 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2020-09-21 16:04:20 +0200 |
commit | 2b73e6ba712d35e6ec767bf722edf542cc2e47c6 (patch) | |
tree | 0a05d22b83daf80742dd064d39e292838dfb0a75 /test/fiber/scheduler.rb | |
parent | 0fa1c82bfc3c679c49df2e586183db1efbd8f62c (diff) |
Simplify the implementation of Scheduler#block
* This shows block() with a timeout is similar to #kernel_sleep and also
does not need to change `@blocking`.
Diffstat (limited to 'test/fiber/scheduler.rb')
-rw-r--r-- | test/fiber/scheduler.rb | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb index d93d0f106d..c685e6ffc0 100644 --- a/test/fiber/scheduler.rb +++ b/test/fiber/scheduler.rb @@ -102,8 +102,8 @@ class Scheduler self.run ensure @closed = true - - # We freeze to detect any inadvertant modifications after the scheduler is closed: + + # We freeze to detect any unintended modifications after the scheduler is closed: self.freeze end @@ -144,19 +144,21 @@ class Scheduler # Used when blocking on synchronization (Mutex#lock, Queue#pop, SizedQueue#push, ...) def block(blocker, timeout = nil) # p [__method__, blocker, timeout] - @blocking += 1 - if timeout @waiting[Fiber.current] = current_time + timeout - end - - Fiber.yield - ensure - @blocking -= 1 - - # Remove from @waiting in the case #unblock was called before the timeout expired: - if timeout - @waiting.delete(Fiber.current) + begin + Fiber.yield + ensure + # Remove from @waiting in the case #unblock was called before the timeout expired: + @waiting.delete(Fiber.current) + end + else + @blocking += 1 + begin + Fiber.yield + ensure + @blocking -= 1 + end end end |