Skip to content

Commit 8089e37

Browse files
Add real URing io_wait priority event repro
1 parent 3742e53 commit 8089e37

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

test/io/event/selector/uring.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,50 @@
55

66
require "io/event"
77
require "io/event/selector"
8+
require "socket"
89

910
describe IO::Event::Selector do
1011
with "URing" do
12+
it "does not resume io_wait with zero for an unrequested priority event" do
13+
skip "URing is not available" unless subject.const_defined?(:URing)
14+
15+
uring = subject.const_get(:URing)
16+
selector = uring.new(Fiber.current)
17+
18+
server = TCPServer.new("127.0.0.1", 0)
19+
client = TCPSocket.new("127.0.0.1", server.addr[1])
20+
peer = server.accept
21+
22+
result = nil
23+
24+
fiber = Fiber.new do
25+
result = selector.io_wait(Fiber.current, client, IO::READABLE)
26+
end
27+
28+
fiber.transfer
29+
30+
peer.send("!", Socket::MSG_OOB)
31+
selector.select(0.1)
32+
33+
expect(result).not.to be == 0
34+
35+
if fiber.alive?
36+
peer.write("x")
37+
38+
10.times do
39+
selector.select(0.1)
40+
break unless fiber.alive?
41+
end
42+
43+
expect(result).to be == IO::READABLE
44+
end
45+
ensure
46+
selector&.close
47+
client&.close
48+
peer&.close
49+
server&.close
50+
end
51+
1152
it "does not expose unmatched poll completions as integer zero from io_wait" do
1253
skip "URing is not available" unless subject.const_defined?(:URing)
1354

0 commit comments

Comments
 (0)