From 64f6f5c594cd52b6e9e0418b4cfb5878fa297779 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Sun, 12 May 2013 16:09:17 +0200 Subject: Fixed BIO_METHOD initialization for thread safety. --- src/net/tls/openssl/TLSSocket_OpenSSL.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'src/net/tls/openssl/TLSSocket_OpenSSL.cpp') diff --git a/src/net/tls/openssl/TLSSocket_OpenSSL.cpp b/src/net/tls/openssl/TLSSocket_OpenSSL.cpp index e62312d6..b8ac18e9 100644 --- a/src/net/tls/openssl/TLSSocket_OpenSSL.cpp +++ b/src/net/tls/openssl/TLSSocket_OpenSSL.cpp @@ -45,6 +45,21 @@ namespace net { namespace tls { +// static +BIO_METHOD TLSSocket_OpenSSL::sm_customBIOMethod = +{ + 100 | BIO_TYPE_SOURCE_SINK, + "vmime::socket glue", + TLSSocket_OpenSSL::bio_write, + TLSSocket_OpenSSL::bio_read, + TLSSocket_OpenSSL::bio_puts, + TLSSocket_OpenSSL::bio_gets, + TLSSocket_OpenSSL::bio_ctrl, + TLSSocket_OpenSSL::bio_create, + TLSSocket_OpenSSL::bio_destroy +}; + + // static ref TLSSocket::wrap(ref session, ref sok) { @@ -82,20 +97,7 @@ void TLSSocket_OpenSSL::createSSLHandle() { if (m_wrapped->isConnected()) { - static BIO_METHOD customBIOMethod; - ::memset(&customBIOMethod, 0, sizeof(customBIOMethod)); - - customBIOMethod.type = 100 | BIO_TYPE_SOURCE_SINK; - customBIOMethod.name = "vmime::socket glue"; - customBIOMethod.bwrite = bio_write; - customBIOMethod.bread = bio_read; - customBIOMethod.bputs = bio_puts; - customBIOMethod.bgets = bio_gets; - customBIOMethod.ctrl = bio_ctrl; - customBIOMethod.create = bio_create; - customBIOMethod.destroy = bio_destroy; - - BIO* sockBio = BIO_new(&customBIOMethod); + BIO* sockBio = BIO_new(&sm_customBIOMethod); sockBio->ptr = this; m_ssl = SSL_new(m_session->getContext()); -- cgit v1.2.3