summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
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