diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2020-08-20 13:51:45 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2020-09-14 16:44:09 +1200 |
commit | d387029f39d976565c955377117103499d47ff09 (patch) | |
tree | 0a28459f929867c698d243584bc676c4ddad100c /test/fiber | |
parent | 905e9c8093b2bb06def609975929465be0f41a0c (diff) | |
download | ruby-d387029f39d976565c955377117103499d47ff09.tar.gz |
Standardised scheduler interface.
Diffstat (limited to 'test/fiber')
-rw-r--r-- | test/fiber/scheduler.rb | 61 | ||||
-rw-r--r-- | test/fiber/test_scheduler.rb | 16 | ||||
-rw-r--r-- | test/fiber/test_sleep.rb | 1 |
3 files changed, 2 insertions, 76 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb index 5508f21cf7..1f690b4c08 100644 --- a/test/fiber/scheduler.rb +++ b/test/fiber/scheduler.rb @@ -14,15 +14,11 @@ class Scheduler @readable = {} @writable = {} @waiting = {} - @blocking = [] - - @ios = ObjectSpace::WeakMap.new end attr :readable attr :writable attr :waiting - attr :blocking def next_timeout _fiber, timeout = @waiting.min_by{|key, value| value} @@ -70,47 +66,11 @@ class Scheduler end end - def for_fd(fd) - @ios[fd] ||= ::IO.for_fd(fd, autoclose: false) - end - - def wait_readable(io) - @readable[io] = Fiber.current - - Fiber.yield - - @readable.delete(io) - - return true - end - - def wait_readable_fd(fd) - wait_readable( - for_fd(fd) - ) - end - - def wait_writable(io) - @writable[io] = Fiber.current - - Fiber.yield - - @writable.delete(io) - - return true - end - - def wait_writable_fd(fd) - wait_writable( - for_fd(fd) - ) - end - def current_time Process.clock_gettime(Process::CLOCK_MONOTONIC) end - def wait_sleep(duration = nil) + def kernel_sleep(duration = nil) @waiting[Fiber.current] = current_time + duration Fiber.yield @@ -118,7 +78,7 @@ class Scheduler return true end - def wait_any(io, events, duration) + def io_wait(io, events, duration) unless (events & IO::READABLE).zero? @readable[io] = Fiber.current end @@ -135,23 +95,6 @@ class Scheduler return true end - def wait_for_single_fd(fd, events, duration) - wait_any( - for_fd(fd), - events, - duration - ) - end - - def enter_blocking_region - # puts "Enter blocking region: #{caller.first}" - end - - def exit_blocking_region - # puts "Exit blocking region: #{caller.first}" - @blocking << caller.first - end - def fiber(&block) fiber = Fiber.new(blocking: false, &block) diff --git a/test/fiber/test_scheduler.rb b/test/fiber/test_scheduler.rb index 52f10846ac..5055a95999 100644 --- a/test/fiber/test_scheduler.rb +++ b/test/fiber/test_scheduler.rb @@ -10,20 +10,4 @@ class TestFiberScheduler < Test::Unit::TestCase end end end - - def test_fiber_blocking - scheduler = Scheduler.new - - thread = Thread.new do - Thread.current.scheduler = scheduler - - # Close is always a blocking operation. - IO.pipe.each(&:close) - end - - thread.join - - assert_not_empty scheduler.blocking - assert_match(/test_scheduler\.rb:\d+:in `close'/, scheduler.blocking.last) - end end diff --git a/test/fiber/test_sleep.rb b/test/fiber/test_sleep.rb index 84e9d27550..f1d9f79fc8 100644 --- a/test/fiber/test_sleep.rb +++ b/test/fiber/test_sleep.rb @@ -43,5 +43,4 @@ class TestFiberSleep < Test::Unit::TestCase assert_operator seconds, :>=, 2, "actual: %p" % seconds end - end |