From 8063cd318beb3eab52595e80f4c40d0f22b35153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Wei=C3=9F?= Date: Wed, 2 May 2018 16:44:53 +0100 Subject: [PATCH] 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. --- Tests/NIOTests/SocketChannelTest.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Tests/NIOTests/SocketChannelTest.swift b/Tests/NIOTests/SocketChannelTest.swift index 5b697fea8c..ce9baa651c 100644 --- a/Tests/NIOTests/SocketChannelTest.swift +++ b/Tests/NIOTests/SocketChannelTest.swift @@ -148,11 +148,13 @@ public class SocketChannelTest : XCTestCase { let serverChannel = try ServerSocketChannel(serverSocket: socket, eventLoop: group.next() as! SelectableEventLoop, group: group) let promise: EventLoopPromise = serverChannel.eventLoop.newPromise() - XCTAssertNoThrow(try serverChannel.pipeline.add(handler: AcceptHandler(promise)).then { - serverChannel.register() - }.then { - serverChannel.bind(to: try! SocketAddress(ipAddress: "127.0.0.1", port: 0)) - }.wait()) + XCTAssertNoThrow(try serverChannel.eventLoop.submit { + serverChannel.pipeline.add(handler: AcceptHandler(promise)).then { + serverChannel.register() + }.then { + serverChannel.bind(to: try! SocketAddress(ipAddress: "127.0.0.1", port: 0)) + } + }.wait().wait() as Void) XCTAssertEqual(active, try serverChannel.eventLoop.submit { serverChannel.readable()