diff options
| author | Wladimir J. van der Laan <[email protected]> | 2017-04-03 12:05:43 +0200 |
|---|---|---|
| committer | Wladimir J. van der Laan <[email protected]> | 2017-04-03 12:06:02 +0200 |
| commit | a2cd0b0eecfedb6aa6a9d3618f13cd77e1ba3042 (patch) | |
| tree | eebc711d6b17ce506a4901773b667c3420730c12 /src/util.cpp | |
| parent | Merge #10139: [rpc] Remove auth cookie on shutdown (diff) | |
| parent | No need to use OpenSSL malloc/free (diff) | |
| download | discoin-a2cd0b0eecfedb6aa6a9d3618f13cd77e1ba3042.tar.xz discoin-a2cd0b0eecfedb6aa6a9d3618f13cd77e1ba3042.zip | |
Merge #10058: No need to use OpenSSL malloc/free
6d5dd60 No need to use OpenSSL malloc/free (Thomas Snider)
Tree-SHA512: 29f790067ffd5a10a8e1a621318a0ba445691f57c804aa3b7c8ca372c8408d8c7fe703c42b48018e400fc32e3feff5ab401d97433910ce2c50e69da0b8a6662e
Diffstat (limited to 'src/util.cpp')
| -rw-r--r-- | src/util.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/util.cpp b/src/util.cpp index 766826da4..db45ad162 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -123,26 +123,24 @@ CTranslationInterface translationInterface; std::atomic<uint32_t> logCategories(0); /** Init OpenSSL library multithreading support */ -static CCriticalSection** ppmutexOpenSSL; +static std::unique_ptr<CCriticalSection[]> ppmutexOpenSSL; void locking_callback(int mode, int i, const char* file, int line) NO_THREAD_SAFETY_ANALYSIS { if (mode & CRYPTO_LOCK) { - ENTER_CRITICAL_SECTION(*ppmutexOpenSSL[i]); + ENTER_CRITICAL_SECTION(ppmutexOpenSSL[i]); } else { - LEAVE_CRITICAL_SECTION(*ppmutexOpenSSL[i]); + LEAVE_CRITICAL_SECTION(ppmutexOpenSSL[i]); } } -// Init +// Singleton for wrapping OpenSSL setup/teardown. class CInit { public: CInit() { // Init OpenSSL library multithreading support - ppmutexOpenSSL = (CCriticalSection**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(CCriticalSection*)); - for (int i = 0; i < CRYPTO_num_locks(); i++) - ppmutexOpenSSL[i] = new CCriticalSection(); + ppmutexOpenSSL.reset(new CCriticalSection[CRYPTO_num_locks()]); CRYPTO_set_locking_callback(locking_callback); // OpenSSL can optionally load a config file which lists optional loadable modules and engines. @@ -166,9 +164,8 @@ public: RAND_cleanup(); // Shutdown OpenSSL library multithreading support CRYPTO_set_locking_callback(NULL); - for (int i = 0; i < CRYPTO_num_locks(); i++) - delete ppmutexOpenSSL[i]; - OPENSSL_free(ppmutexOpenSSL); + // Clear the set of locks now to maintain symmetry with the constructor. + ppmutexOpenSSL.reset(); } } instance_of_cinit; |