aboutsummaryrefslogtreecommitdiffstats
path: root/test/fiber
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-08-20 13:51:45 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-09-14 16:44:09 +1200
commitd387029f39d976565c955377117103499d47ff09 (patch)
tree0a28459f929867c698d243584bc676c4ddad100c /test/fiber
parent905e9c8093b2bb06def609975929465be0f41a0c (diff)
downloadruby-d387029f39d976565c955377117103499d47ff09.tar.gz
Standardised scheduler interface.
Diffstat (limited to 'test/fiber')
-rw-r--r--test/fiber/scheduler.rb61
-rw-r--r--test/fiber/test_scheduler.rb16
-rw-r--r--test/fiber/test_sleep.rb1
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