aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2020-09-17 14:45:44 +0200
committerBenoit Daloze <eregontp@gmail.com>2020-09-17 14:59:38 +0200
commit9472d160619861201bad91560c06248fef8362dc (patch)
treea2cf2586ca2c920c6f64f58971128982c8669dda /test
parent738a089b3ac55e5bfb26f9121ee73ffcb8c4a36b (diff)
downloadruby-9472d160619861201bad91560c06248fef8362dc.tar.gz
Call scheduler.block instead of scheduler.kernel_sleep for blocking Queue/SizedQueue operations
* scheduler.unblock was already already called before but with no corresponding scheduler.block * add test that Queue#pop makes the scheduler wait until it gets an element.
Diffstat (limited to 'test')
-rw-r--r--test/fiber/scheduler.rb3
-rw-r--r--test/fiber/test_mutex.rb25
2 files changed, 27 insertions, 1 deletions
diff --git a/test/fiber/scheduler.rb b/test/fiber/scheduler.rb
index 1e7f60cdf0..f7a773ade1 100644
--- a/test/fiber/scheduler.rb
+++ b/test/fiber/scheduler.rb
@@ -93,6 +93,7 @@ class Scheduler
end
ensure
@urgent.each(&:close)
+ @urgent = nil
end
def current_time
@@ -139,7 +140,7 @@ class Scheduler
end
if io = @urgent&.last
- @urgent.last.write_nonblock('.')
+ io.write_nonblock('.')
end
end
diff --git a/test/fiber/test_mutex.rb b/test/fiber/test_mutex.rb
index 1f53ae1a1f..baec559a70 100644
--- a/test/fiber/test_mutex.rb
+++ b/test/fiber/test_mutex.rb
@@ -115,6 +115,31 @@ class TestFiberMutex < Test::Unit::TestCase
assert processed == 3
end
+ def test_queue_pop_waits
+ queue = Queue.new
+ running = false
+
+ thread = Thread.new do
+ scheduler = Scheduler.new
+ Thread.current.scheduler = scheduler
+
+ result = nil
+ Fiber.schedule do
+ result = queue.pop
+ end
+
+ running = true
+ scheduler.run
+ result
+ end
+
+ Thread.pass until running
+ sleep 0.1
+
+ queue << :done
+ assert_equal :done, thread.value
+ end
+
def test_mutex_deadlock
err = /No live threads left. Deadlock\?/
assert_in_out_err %W[-I#{__dir__} -], <<-RUBY, ['in synchronize'], err, success: false