diff --git a/kmipclient/include/kmipclient/NetClient.hpp b/kmipclient/include/kmipclient/NetClient.hpp index 40e3da2..e0edf8c 100644 --- a/kmipclient/include/kmipclient/NetClient.hpp +++ b/kmipclient/include/kmipclient/NetClient.hpp @@ -8,6 +8,7 @@ #ifndef KMIP_NET_CLIENT_HPP #define KMIP_NET_CLIENT_HPP +#include #include #include #include @@ -99,7 +100,7 @@ namespace kmipclient { * @brief Checks whether a connection is currently established. * @return true when connected, false otherwise. */ - [[nodiscard]] bool is_connected() const { return m_isConnected; } + [[nodiscard]] bool is_connected() const noexcept { return m_isConnected; } /** * @brief Sends bytes over the established connection. * @param data Source buffer. @@ -122,7 +123,7 @@ namespace kmipclient { std::string m_serverCaCertificateFn; int m_timeout_ms; TlsVerificationOptions m_tls_verification{}; - bool m_isConnected = false; + std::atomic m_isConnected{false}; }; } // namespace kmipclient #endif // KMIP_NET_CLIENT_HPP diff --git a/kmipclient/src/NetClientOpenSSL.cpp b/kmipclient/src/NetClientOpenSSL.cpp index c269efb..34ef2bf 100644 --- a/kmipclient/src/NetClientOpenSSL.cpp +++ b/kmipclient/src/NetClientOpenSSL.cpp @@ -330,14 +330,7 @@ namespace kmipclient { } NetClientOpenSSL::~NetClientOpenSSL() { - // Avoid calling virtual methods from destructor. - if (bio_) { - bio_.reset(); - } - if (ctx_) { - ctx_.reset(); - } - m_isConnected = false; + close(); } bool NetClientOpenSSL::connect() { @@ -477,14 +470,9 @@ namespace kmipclient { } void NetClientOpenSSL::close() { - if (bio_) { - // BIO_free_all is called by unique_ptr reset - bio_.reset(); - } - if (ctx_) { - ctx_.reset(); - } m_isConnected = false; + bio_.reset(); + ctx_.reset(); } int NetClientOpenSSL::send(std::span data) {