diff --git a/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/GetPeersRequestHandler.java b/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/GetPeersRequestHandler.java index 2d4453b161..426cefe673 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/GetPeersRequestHandler.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/peerexchange/GetPeersRequestHandler.java @@ -70,6 +70,21 @@ class GetPeersRequestHandler { "The peers address must have been already set at the moment"); GetPeersResponse getPeersResponse = new GetPeersResponse(getPeersRequest.nonce, peerManager.getConnectedNonSeedNodeReportedPeers(connection.getPeersNodeAddressOptional().get())); + + checkArgument(timeoutTimer == null, "onGetPeersRequest must not be called twice."); + timeoutTimer = UserThread.runAfter(() -> { // setup before sending to avoid race conditions + if (!stopped) { + String errorMessage = "A timeout occurred at sending getPeersResponse:" + getPeersResponse + " on connection:" + connection; + log.info(errorMessage + " / PeerExchangeHandshake=" + + GetPeersRequestHandler.this); + log.info("timeoutTimer called. this=" + this); + handleFault(errorMessage, CloseConnectionReason.SEND_MSG_TIMEOUT, connection); + } else { + log.trace("We have stopped already. We ignore that timeoutTimer.run call."); + } + }, + TIME_OUT_SEC, TimeUnit.SECONDS); + SettableFuture future = networkNode.sendMessage(connection, getPeersResponse); Futures.addCallback(future, new FutureCallback() { @@ -98,20 +113,6 @@ class GetPeersRequestHandler { } }); - checkArgument(timeoutTimer == null, "onGetPeersRequest must not be called twice."); - timeoutTimer = UserThread.runAfter(() -> { - if (!stopped) { - String errorMessage = "A timeout occurred at sending getPeersResponse:" + getPeersResponse + " on connection:" + connection; - log.info(errorMessage + " / PeerExchangeHandshake=" + - GetPeersRequestHandler.this); - log.info("timeoutTimer called. this=" + this); - handleFault(errorMessage, CloseConnectionReason.SEND_MSG_TIMEOUT, connection); - } else { - log.trace("We have stopped already. We ignore that timeoutTimer.run call."); - } - }, - TIME_OUT_SEC, TimeUnit.SECONDS); - peerManager.addToReportedPeers(getPeersRequest.reportedPeers, connection); }