]> granicus.if.org Git - icinga2/commitdiff
Fix crash in TlsStream::IsEof
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 10 Sep 2014 06:51:25 +0000 (08:51 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 10 Sep 2014 06:51:25 +0000 (08:51 +0200)
refs #6862

lib/base/tlsstream.cpp
lib/base/tlsstream.hpp

index 17585bf6aad6ab00af50ee7416cc71766986dcb5..fb7c762d60e30058ea852db29852eefc57f60ee5 100644 (file)
@@ -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<SSL_CTX>& 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;
 }
index a6a55e68d58b5d230bf1ec9917b47e811c13536a..227fb8e1f426fe5ed0a18fef17a47ff86ae86eb7 100644 (file)
@@ -54,9 +54,9 @@ public:
 
 private:
        shared_ptr<SSL> 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;