diff options
| author | nagachika <nagachika@ruby-lang.org> | 2021-04-24 14:04:04 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2021-04-24 14:04:04 +0900 |
| commit | 13f93ad16d3d1ecf96ece229cd4bc5ea294e1a71 (patch) | |
| tree | 21bddf7f946238897e120b267b963e6829a7389f /test | |
| parent | 5a9b5b8e953dc36f4f7f7639e8aeaa8132241c79 (diff) | |
merge revision(s) 611e711085c7e3984555a79626d025c8b876eced,a9c5c2d614f30a616970245fef3e7ffc151e2ecf: [Backport #17527]
Test incorrect behaviour of `rb_io_wait_readable/writable`.
---
test/fiber/test_io.rb | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
Check errno before invoking scheduler in
`rb_io_wait_readable/writable`.
See <https://bugs.ruby-lang.org/issues/17527> for more details.
---
io.c | 66 +++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 35 insertions(+), 31 deletions(-)
Diffstat (limited to 'test')
| -rw-r--r-- | test/fiber/test_io.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/fiber/test_io.rb b/test/fiber/test_io.rb index f01cc3af1b..fafda7c310 100644 --- a/test/fiber/test_io.rb +++ b/test/fiber/test_io.rb @@ -62,4 +62,39 @@ class TestFiberIO < Test::Unit::TestCase end end.each(&:join) end + + def test_epipe_on_read + skip "UNIXSocket is not defined!" unless defined?(UNIXSocket) + + i, o = UNIXSocket.pair + + unless i.nonblock? && o.nonblock? + i.close + o.close + skip "I/O is not non-blocking!" + end + + error = nil + + thread = Thread.new do + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + + Fiber.schedule do + begin + i.close + o.write(MESSAGE) + rescue => error + # Saved into error. + end + end + end + + thread.join + + i.close + o.close + + assert_kind_of Errno::EPIPE, error + end end |
