summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorBen Caimano <ben.caimano@10gen.com>2018-09-12 11:13:36 -0400
committerBen Caimano <ben.caimano@10gen.com>2018-09-13 18:12:42 -0400
commit6ff9e1ee65c95a1ba904862b445607a73822a67e (patch)
tree11b1c080f8d41a53697fc0acb3b1289fccaa450c /src/mongo
parentb66d32149095d365fa06637bd3211e97028d2e8d (diff)
downloadmongo-6ff9e1ee65c95a1ba904862b445607a73822a67e.tar.gz
SERVER-37081 Catch asio::system_errors when resolving GenericSocket
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/transport/session_asio.h2
-rw-r--r--src/mongo/transport/transport_layer_asio.cpp16
2 files changed, 11 insertions, 7 deletions
diff --git a/src/mongo/transport/session_asio.h b/src/mongo/transport/session_asio.h
index d1c2bd865eb..00eab1d0ae0 100644
--- a/src/mongo/transport/session_asio.h
+++ b/src/mongo/transport/session_asio.h
@@ -227,7 +227,7 @@ protected:
if (_blockingMode == Sync) {
std::error_code ec;
_sslSocket->handshake(asio::ssl::stream_base::client, ec);
- return Future<void>::makeReady(errorCodeToStatus(ec));
+ return futurize(ec);
} else {
return _sslSocket->async_handshake(asio::ssl::stream_base::client, UseFuture{});
}
diff --git a/src/mongo/transport/transport_layer_asio.cpp b/src/mongo/transport/transport_layer_asio.cpp
index 617dced8cac..ad87ea0ed38 100644
--- a/src/mongo/transport/transport_layer_asio.cpp
+++ b/src/mongo/transport/transport_layer_asio.cpp
@@ -114,7 +114,7 @@ private:
});
} catch (asio::system_error& ex) {
- return Future<void>::makeReady(errorCodeToStatus(ex.code()));
+ return futurize(ex.code());
}
}
@@ -561,11 +561,15 @@ Future<SessionHandle> TransportLayerASIO::asyncConnect(HostAndPort peer,
connector->resolver.asyncResolve(connector->peer, _listenerOptions.enableIPv6)
.then([connector](WrappedResolver::EndpointVector results) {
- stdx::unique_lock<stdx::mutex> lk(connector->mutex);
- connector->resolvedEndpoint = results.front();
- connector->socket.open(connector->resolvedEndpoint->protocol());
- connector->socket.non_blocking(true);
- lk.unlock();
+ try {
+ stdx::lock_guard<stdx::mutex> lk(connector->mutex);
+
+ connector->resolvedEndpoint = results.front();
+ connector->socket.open(connector->resolvedEndpoint->protocol());
+ connector->socket.non_blocking(true);
+ } catch (asio::system_error& ex) {
+ return futurize(ex.code());
+ }
return connector->socket.async_connect(*connector->resolvedEndpoint, UseFuture{});
})