diff --git a/src/lib/net/SecureSocket.cpp b/src/lib/net/SecureSocket.cpp index 360db31c..76b3662f 100644 --- a/src/lib/net/SecureSocket.cpp +++ b/src/lib/net/SecureSocket.cpp @@ -84,16 +84,8 @@ SecureSocket::~SecureSocket() // could cause events to get called on a dead object. TCPSocket // will do this, too, but the double-call is harmless setJob(NULL); - if (m_ssl->m_ssl != NULL) { - SSL_shutdown(m_ssl->m_ssl); + freeSSLResources(); - SSL_free(m_ssl->m_ssl); - m_ssl->m_ssl = NULL; - } - if (m_ssl->m_context != NULL) { - SSL_CTX_free(m_ssl->m_context); - m_ssl->m_context = NULL; - } // removing sleep() because I have no idea why you would want to do it // ... smells of trying to cover up a bug you don't understand //ARCH->sleep(1); @@ -104,12 +96,24 @@ void SecureSocket::close() { isFatal(true); - - SSL_shutdown(m_ssl->m_ssl); - + freeSSLResources(); TCPSocket::close(); } +void SecureSocket::freeSSLResources() +{ + if (m_ssl->m_ssl != NULL) { + SSL_shutdown(m_ssl->m_ssl); + SSL_free(m_ssl->m_ssl); + m_ssl->m_ssl = NULL; + } + + if (m_ssl->m_context != NULL) { + SSL_CTX_free(m_ssl->m_context); + m_ssl->m_context = NULL; + } +} + void SecureSocket::connect(const NetworkAddress& addr) { diff --git a/src/lib/net/SecureSocket.h b/src/lib/net/SecureSocket.h index 01d3c3ff..b2948c5e 100644 --- a/src/lib/net/SecureSocket.h +++ b/src/lib/net/SecureSocket.h @@ -88,6 +88,8 @@ private: void handleTCPConnected(const Event& event, void*); + void freeSSLResources(); + private: Ssl* m_ssl; bool m_secureReady;