From 8f2c8280d1782c1f9fa0f7c6bf3e41109cf40291 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 20:49:31 +0000 Subject: [PATCH] bugfix(libcurl): Initialize libcurl before plugins to prevent EAC access violation --- .../Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp | 3 --- .../GameNetwork/GeneralsOnline/OnlineServices_Init.cpp | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp index cfbb4fdbee0..7a3f38fe3f0 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp @@ -195,9 +195,6 @@ void HTTPManager::Initialize() { CHECK_MAIN_THREAD; - // Initialize libcurl global state - curl_global_init(CURL_GLOBAL_DEFAULT); - m_pCurl = curl_multi_init(); m_bProxyEnabled = DeterminePlatformProxySettings(); } diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp index 3530de6fcd1..688ef28eb1e 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp @@ -987,6 +987,11 @@ void NGMP_OnlineServicesManager::Tick() void NGMP_OnlineServicesManager::InitSentry() { + // Initialize libcurl global state here, before any plugins (e.g. EasyAntiCheat) are loaded. + // This ensures libcurl's internal mutexes are fully initialized before the EAC plugin + // attempts to use them, preventing an access violation in mtx_do_lock on null mutex state. + curl_global_init(CURL_GLOBAL_DEFAULT); + #if !_DEBUG std::string strDumpPath = std::format("{}/GeneralsOnlineCrashData/", TheGlobalData->getPath_UserData().str()); if (!std::filesystem::exists(strDumpPath))