Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix example fiber scheduler reg. writable events #4777

Merged
merged 1 commit into from Aug 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion test/fiber/scheduler.rb
Expand Up @@ -60,6 +60,7 @@ def run

readable&.each do |io|
if fiber = @readable.delete(io)
@writable.delete(io) if @writable[io] == fiber
selected[fiber] = IO::READABLE
elsif io == @urgent.first
@urgent.first.read_nonblock(1024)
Expand All @@ -68,7 +69,8 @@ def run

writable&.each do |io|
if fiber = @writable.delete(io)
selected[fiber] |= IO::WRITABLE
@readable.delete(io) if @readable[io] == fiber
selected[fiber] = selected.fetch(fiber, 0) | IO::WRITABLE
end
end

Expand Down
43 changes: 43 additions & 0 deletions test/fiber/test_io.rb
Expand Up @@ -97,4 +97,47 @@ def test_epipe_on_read

assert_kind_of Errno::EPIPE, error
end

def test_tcp_accept
server = TCPServer.new('localhost', 0)

th = Thread.new do
Fiber.set_scheduler(Scheduler.new)

Fiber.schedule do
sender = server.accept
sender.wait_writable
sender.write "hello"
sender.close
end
end

recver = TCPSocket.new('localhost', server.local_address.ip_port)
assert "hello", recver.read

recver.close
server.close
th.join
end

def test_tcp_connect
server = TCPServer.new('localhost', 0)

th = Thread.new do
Fiber.set_scheduler(Scheduler.new)

Fiber.schedule do
sender = TCPSocket.new('localhost', server.local_address.ip_port)
sender.write "hello"
sender.close
end
end

recver = server.accept
assert "hello", recver.read

recver.close
server.close
th.join
end
end