diff options
| author | nagachika <nagachika@ruby-lang.org> | 2024-11-30 14:31:31 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2024-11-30 14:31:31 +0900 |
| commit | 87249cbddb5dbac16cb7f0fa33958a42389759cb (patch) | |
| tree | 759cd9194d8cd8a690a517f0b492e0a30c44b972 /test | |
| parent | bb065f08441aab8f97b45bd3f1600202547c9532 (diff) | |
merge revision(s) a8c2d5e7bee5fad0965baeb58d312ddc5932ec26: [Backport #20907]
Ensure fiber scheduler re-acquires mutex when interrupted from sleep. (#12158)
[Bug #20907]
Diffstat (limited to 'test')
| -rw-r--r-- | test/fiber/test_scheduler.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/fiber/test_scheduler.rb b/test/fiber/test_scheduler.rb index f8993bb18f..98f20e1c58 100644 --- a/test/fiber/test_scheduler.rb +++ b/test/fiber/test_scheduler.rb @@ -182,4 +182,32 @@ class TestFiberScheduler < Test::Unit::TestCase thread.join signaller.join end + + def test_condition_variable + condition_variable = ::Thread::ConditionVariable.new + mutex = ::Thread::Mutex.new + + error = nil + + thread = Thread.new do + Thread.current.report_on_exception = false + + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + + fiber = Fiber.schedule do + begin + mutex.synchronize do + condition_variable.wait(mutex) + end + rescue => error + end + end + + fiber.raise(RuntimeError) + end + + thread.join + assert_kind_of RuntimeError, error + end end |
