diff --git a/src/ssl.cc b/src/ssl.cc
index 9c28c7d88e8826b99776306738adc845e12312e0..9360b7f9d547a749a702d07024fa2500307ebdda 100644
--- a/src/ssl.cc
+++ b/src/ssl.cc
@@ -42,12 +42,11 @@ namespace ssl {
 
 // CRYPTO_LOCK is deprecated as of OpenSSL 1.1.0
 LibsslGlobalLock::LibsslGlobalLock() {}
-LibsslGlobalLock::~LibsslGlobalLock() {}
 
 #else // !OPENSSL_1_1_API
 
 namespace {
-std::vector<std::mutex> ssl_global_locks;
+std::mutex *ssl_global_locks;
 } // namespace
 
 namespace {
@@ -61,11 +60,11 @@ void ssl_locking_cb(int mode, int type, const char *file, int line) {
 } // namespace
 
 LibsslGlobalLock::LibsslGlobalLock() {
-  if (!ssl_global_locks.empty()) {
+  if (ssl_global_locks) {
     std::cerr << "OpenSSL global lock has been already set" << std::endl;
     assert(0);
   }
-  ssl_global_locks = std::vector<std::mutex>(CRYPTO_num_locks());
+  ssl_global_locks = new std::mutex[CRYPTO_num_locks()];
   // CRYPTO_set_id_callback(ssl_thread_id); OpenSSL manual says that
   // if threadid_func is not specified using
   // CRYPTO_THREADID_set_callback(), then default implementation is
@@ -73,8 +72,6 @@ LibsslGlobalLock::LibsslGlobalLock() {
   CRYPTO_set_locking_callback(ssl_locking_cb);
 }
 
-LibsslGlobalLock::~LibsslGlobalLock() { ssl_global_locks.clear(); }
-
 #endif // !OPENSSL_1_1_API
 
 const char *get_tls_protocol(SSL *ssl) {
diff --git a/src/ssl.h b/src/ssl.h
index 691748e9254c3ad7b82263aa327bdb127ee0f756..845aa2fe4e77f69e608cd6b59bdf1a752e93cc25 100644
--- a/src/ssl.h
+++ b/src/ssl.h
@@ -40,7 +40,6 @@ namespace ssl {
 class LibsslGlobalLock {
 public:
   LibsslGlobalLock();
-  ~LibsslGlobalLock();
   LibsslGlobalLock(const LibsslGlobalLock &) = delete;
   LibsslGlobalLock &operator=(const LibsslGlobalLock &) = delete;
 };