summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-05-28 10:59:25 +0200
committerGitHub <noreply@github.com>2019-05-28 10:59:25 +0200
commitafd34463e0e857f5bf52fd60bdd2fcaa4e01b77a (patch)
tree66e1bba2982412e84237d05ac27836f1ad099da5 /vespalib
parentda58e8e064f7fcbac13836a617100dac2504d607 (diff)
parent702e69e44831b43e85d9ac1cf1d05da6bd2fc5ce (diff)
Merge pull request #9567 from vespa-engine/havardpe/improve-default-crypto-engine-lifetime-management
use proper singleton for default crypto engine
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.cpp24
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.h3
2 files changed, 11 insertions, 16 deletions
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
index e6127204ac2..ddc2ff14498 100644
--- a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
@@ -229,26 +229,24 @@ CryptoEngine::SP create_default_crypto_engine() {
return tls;
}
-} // namespace vespalib::<unnamed>
+CryptoEngine::SP try_create_default_crypto_engine() {
+ try {
+ return create_default_crypto_engine();
+ } catch (net::tls::CryptoException &e) {
+ LOG(error, "failed to create default crypto engine: %s", e.what());
+ std::quick_exit(78);
+ }
+}
-std::mutex CryptoEngine::_shared_lock;
-CryptoEngine::SP CryptoEngine::_shared_default(nullptr);
+} // namespace vespalib::<unnamed>
CryptoEngine::~CryptoEngine() = default;
CryptoEngine::SP
CryptoEngine::get_default()
{
- std::lock_guard guard(_shared_lock);
- if (!_shared_default) {
- try {
- _shared_default = create_default_crypto_engine();
- } catch (net::tls::CryptoException &e) {
- LOG(error, "failed to create default crypto engine: %s", e.what());
- std::quick_exit(78);
- }
- }
- return _shared_default;
+ static const CryptoEngine::SP shared_default = try_create_default_crypto_engine();
+ return shared_default;
}
CryptoSocket::UP
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.h b/vespalib/src/vespa/vespalib/net/crypto_engine.h
index 177766fb789..1cb1305e039 100644
--- a/vespalib/src/vespa/vespalib/net/crypto_engine.h
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.h
@@ -20,9 +20,6 @@ struct CryptoEngine {
virtual CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) = 0;
virtual ~CryptoEngine();
static CryptoEngine::SP get_default();
-private:
- static std::mutex _shared_lock;
- static CryptoEngine::SP _shared_default;
};
/**