No need to use OpenSSL malloc/free
This commit is contained in:
parent
02d64bd929
commit
6d5dd60c88
1 changed files with 7 additions and 10 deletions
17
src/util.cpp
17
src/util.cpp
|
@ -117,26 +117,24 @@ std::atomic<bool> fReopenDebugLog(false);
|
|||
CTranslationInterface translationInterface;
|
||||
|
||||
/** 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.
|
||||
|
@ -160,9 +158,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;
|
||||
|
|
Loading…
Reference in a new issue