From: Gunnar Beutner Date: Wed, 10 Sep 2014 06:51:25 +0000 (+0200) Subject: Fix crash in TlsStream::IsEof X-Git-Tag: v2.1.1~12 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc4fe38d8f3c24c64c6661bf9e3035f34cef3388;p=icinga2 Fix crash in TlsStream::IsEof refs #6862 --- diff --git a/lib/base/tlsstream.cpp b/lib/base/tlsstream.cpp index 17585bf6a..fb7c762d6 100644 --- a/lib/base/tlsstream.cpp +++ b/lib/base/tlsstream.cpp @@ -36,7 +36,7 @@ bool I2_EXPORT TlsStream::m_SSLIndexInitialized = false; * @param sslContext The SSL context for the client. */ TlsStream::TlsStream(const Socket::Ptr& socket, ConnectionRole role, const shared_ptr& sslContext) - : m_Socket(socket), m_Role(role) + : m_Eof(false), m_Socket(socket), m_Role(role) { std::ostringstream msgbuf; char errbuf[120]; @@ -248,6 +248,10 @@ void TlsStream::Write(const void *buffer, size_t count) */ void TlsStream::Close(void) { + boost::mutex::scoped_lock alock(m_IOActionLock); + + m_Eof = true; + for (int i = 0; i < 5; i++) { int rc, err; @@ -286,5 +290,5 @@ close_socket: bool TlsStream::IsEof(void) const { - return (BIO_eof(m_BIO) == 1); + return m_Eof; } diff --git a/lib/base/tlsstream.hpp b/lib/base/tlsstream.hpp index a6a55e68d..227fb8e1f 100644 --- a/lib/base/tlsstream.hpp +++ b/lib/base/tlsstream.hpp @@ -54,9 +54,9 @@ public: private: shared_ptr m_SSL; + bool m_Eof; mutable boost::mutex m_SSLLock; mutable boost::mutex m_IOActionLock; - BIO *m_BIO; Socket::Ptr m_Socket; ConnectionRole m_Role;