AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
OpenSSLCrypto Namespace Reference

Functions

AC_COMMON_API void threadsSetup ()
 Needs to be called before threads using openssl are spawned.
 
AC_COMMON_API void threadsCleanup ()
 Needs to be called after threads using openssl are despawned.
 

Detailed Description

A group of functions which setup openssl crypto module to work properly in multithreaded enviroment If not setup properly - it will crash

Function Documentation

◆ threadsCleanup()

void OpenSSLCrypto::threadsCleanup ( )

Needs to be called after threads using openssl are despawned.

89{
90#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL
91 CRYPTO_set_locking_callback(nullptr);
92 CRYPTO_THREADID_set_callback(nullptr);
93
94 for (int i = 0 ; i < CRYPTO_num_locks(); ++i)
95 {
96 delete cryptoLocks[i];
97 }
98
99 cryptoLocks.resize(0);
100#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
101 OSSL_PROVIDER_unload(LegacyProvider);
102 OSSL_PROVIDER_unload(DefaultProvider);
103 OSSL_PROVIDER_set_default_search_path(nullptr, nullptr);
104#endif
105}

Referenced by main().

◆ threadsSetup()

void OpenSSLCrypto::threadsSetup ( )

Needs to be called before threads using openssl are spawned.

65{
66#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL
67 cryptoLocks.resize(CRYPTO_num_locks());
68
69 for (int i = 0 ; i < CRYPTO_num_locks(); ++i)
70 {
71 cryptoLocks[i] = new std::mutex();
72 }
73
74 (void)&threadIdCallback;
75 CRYPTO_THREADID_set_callback(threadIdCallback);
76
77 (void)&lockingCallback;
78 CRYPTO_set_locking_callback(lockingCallback);
79#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
80#if AC_PLATFORM == AC_PLATFORM_WINDOWS
81 SetupLibrariesForWindows();
82#endif
83 LegacyProvider = OSSL_PROVIDER_load(nullptr, "legacy");
84 DefaultProvider = OSSL_PROVIDER_load(nullptr, "default");
85#endif
86}

Referenced by main().