Skip to content

Commit 8063cd3

Browse files
weissiLukasa
authored andcommitted
fix one more register/bind race (#379)
Motivation: On Linux registration without bind/connect leads to `EPOLLHUP` and in tests we often hit that race. This fixes one more instance of that. Modifications: Make sure the bind happens before we enter the selector. Result: more stable tests, fixes #378.
1 parent 2b9469b commit 8063cd3

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

Tests/NIOTests/SocketChannelTest.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,13 @@ public class SocketChannelTest : XCTestCase {
148148
let serverChannel = try ServerSocketChannel(serverSocket: socket, eventLoop: group.next() as! SelectableEventLoop, group: group)
149149
let promise: EventLoopPromise<IOError> = serverChannel.eventLoop.newPromise()
150150

151-
XCTAssertNoThrow(try serverChannel.pipeline.add(handler: AcceptHandler(promise)).then {
152-
serverChannel.register()
153-
}.then {
154-
serverChannel.bind(to: try! SocketAddress(ipAddress: "127.0.0.1", port: 0))
155-
}.wait())
151+
XCTAssertNoThrow(try serverChannel.eventLoop.submit {
152+
serverChannel.pipeline.add(handler: AcceptHandler(promise)).then {
153+
serverChannel.register()
154+
}.then {
155+
serverChannel.bind(to: try! SocketAddress(ipAddress: "127.0.0.1", port: 0))
156+
}
157+
}.wait().wait() as Void)
156158

157159
XCTAssertEqual(active, try serverChannel.eventLoop.submit {
158160
serverChannel.readable()

0 commit comments

Comments
 (0)