From 91c82263a5985f8e04d8fa9c6f864345d4423ba1 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 12 Mar 2013 11:56:14 +0100 Subject: [PATCH] Fix some deadlocks in the TlsStream class. --- lib/base/tlsstream.cpp | 4 +--- lib/remoting/endpointmanager.cpp | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/base/tlsstream.cpp b/lib/base/tlsstream.cpp index f2de81938..eae8e5eaa 100644 --- a/lib/base/tlsstream.cpp +++ b/lib/base/tlsstream.cpp @@ -42,8 +42,6 @@ TlsStream::TlsStream(const Stream::Ptr& innerStream, TlsRole role, shared_ptr(SSL_new(m_SSLContext.get()), SSL_free); m_SSLContext.reset(); @@ -54,7 +52,7 @@ void TlsStream::Start(void) << errinfo_openssl_error(ERR_get_error())); } - if (!GetClientCertificate()) + if (!m_SSL) BOOST_THROW_EXCEPTION(logic_error("No X509 client certificate was specified.")); if (!m_SSLIndexInitialized) { diff --git a/lib/remoting/endpointmanager.cpp b/lib/remoting/endpointmanager.cpp index fc09b1013..001921a5c 100644 --- a/lib/remoting/endpointmanager.cpp +++ b/lib/remoting/endpointmanager.cpp @@ -111,7 +111,7 @@ void EndpointManager::AddListener(const String& service) { ObjectLock olock(this); - shared_ptr sslContext = GetSSLContext(); + shared_ptr sslContext = m_SSLContext; if (!sslContext) BOOST_THROW_EXCEPTION(logic_error("SSL context is required for AddListener()")); @@ -140,7 +140,7 @@ void EndpointManager::AddListener(const String& service) void EndpointManager::AddConnection(const String& node, const String& service) { ObjectLock olock(this); - shared_ptr sslContext = GetSSLContext(); + shared_ptr sslContext = m_SSLContext; if (!sslContext) BOOST_THROW_EXCEPTION(logic_error("SSL context is required for AddConnection()")); @@ -160,7 +160,7 @@ void EndpointManager::NewClientHandler(const Socket::Ptr& client, TlsRole role) ObjectLock olock(this); String peerAddress = client->GetPeerAddress(); - TlsStream::Ptr tlsStream = boost::make_shared(client, role, GetSSLContext()); + TlsStream::Ptr tlsStream = boost::make_shared(client, role, m_SSLContext); tlsStream->Start(); m_PendingClients.insert(tlsStream);