diff options
author | Ben Caimano <ben.caimano@10gen.com> | 2018-09-12 11:13:36 -0400 |
---|---|---|
committer | Ben Caimano <ben.caimano@10gen.com> | 2018-09-13 18:12:42 -0400 |
commit | 6ff9e1ee65c95a1ba904862b445607a73822a67e (patch) | |
tree | 11b1c080f8d41a53697fc0acb3b1289fccaa450c /src/mongo | |
parent | b66d32149095d365fa06637bd3211e97028d2e8d (diff) | |
download | mongo-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.h | 2 | ||||
-rw-r--r-- | src/mongo/transport/transport_layer_asio.cpp | 16 |
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{}); }) |