From 0a745b47880fb16b1db8cd3327377a383dbfe6a8 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Tue, 8 Jun 2021 05:06:21 +0300 Subject: Revert "Merge branch 'DRTVWR-520-apple-notarization' into DRTVWR-540-maint" This reverts commit 681298dd726b2d00910fe71646147fadd1aba980, reversing changes made to 323f41f4892248762fc8505d8df17d70bd833cf3. --- indra/llcorehttp/CMakeLists.txt | 1 + indra/llcorehttp/httpcommon.cpp | 55 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) (limited to 'indra/llcorehttp') diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index d90d148ee6..240ea2da83 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -176,6 +176,7 @@ if (DARWIN) set(copy_dylibs libapr-1.0.dylib libaprutil-1.0.dylib + libexception_handler.dylib libnghttp2*.dylib liburiparser*.dylib ${EXPAT_COPY} diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp index bbf23a6d70..e37a38b05f 100644 --- a/indra/llcorehttp/httpcommon.cpp +++ b/indra/llcorehttp/httpcommon.cpp @@ -23,6 +23,13 @@ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ +#if LL_WINDOWS +#define SAFE_SSL 1 +#elif LL_DARWIN +#define SAFE_SSL 1 +#else +#define SAFE_SSL 1 +#endif #include "linden_common.h" // Modifies curl/curl.h interfaces #include "httpcommon.h" @@ -31,6 +38,10 @@ #include #include #include +#if SAFE_SSL +#include +#include // std::hash +#endif namespace LLCore @@ -337,6 +348,34 @@ void deallocateEasyCurl(CURL *curlp) } +#if SAFE_SSL +//static +void ssl_locking_callback(int mode, int type, const char *file, int line) +{ + if (type >= sSSLMutex.size()) + { + LL_WARNS() << "Attempt to get unknown MUTEX in SSL Lock." << LL_ENDL; + } + + if (mode & CRYPTO_LOCK) + { + sSSLMutex[type]->lock(); + } + else + { + sSSLMutex[type]->unlock(); + } +} + +//static +unsigned long ssl_thread_id(void) +{ + // std::thread::id is very deliberately opaque, but we can hash it + return std::hash()(LLThread::currentID()); +} +#endif + + } void initialize() @@ -348,11 +387,27 @@ void initialize() check_curl_code(code, CURL_GLOBAL_ALL); +#if SAFE_SSL + S32 mutex_count = CRYPTO_num_locks(); + for (S32 i = 0; i < mutex_count; i++) + { + sSSLMutex.push_back(LLMutex_ptr(new LLMutex())); + } + CRYPTO_set_id_callback(&ssl_thread_id); + CRYPTO_set_locking_callback(&ssl_locking_callback); +#endif + } void cleanup() { +#if SAFE_SSL + CRYPTO_set_id_callback(NULL); + CRYPTO_set_locking_callback(NULL); + sSSLMutex.clear(); +#endif + curl_global_cleanup(); } -- cgit v1.2.3