diff --git a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/HTTP/HTTPRequest.h b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/HTTP/HTTPRequest.h index 1d0908e3564..f9f39579787 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/HTTP/HTTPRequest.h +++ b/GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/HTTP/HTTPRequest.h @@ -54,6 +54,14 @@ class HTTPRequest std::string GetURI() { return m_strURI; } + + // Clear callbacks to prevent accessing destroyed objects during shutdown + void ClearCallbacks() + { + m_completionCallback = nullptr; + m_progressCallback = nullptr; + } + private: void PlatformStartRequest(); diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp index 2fe0faeed6b..26cb254862f 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp @@ -67,6 +67,15 @@ void HTTPManager::Shutdown() NetworkLog(ELogVerbosity::LOG_RELEASE, "[HTTPManager] Waiting for %d in-flight requests to complete...", (int)m_vecRequestsInFlight.size()); + // Clear all callbacks on in-flight requests to prevent accessing destroyed objects + for (HTTPRequest* pRequest : m_vecRequestsInFlight) + { + if (pRequest != nullptr) + { + pRequest->ClearCallbacks(); + } + } + // Wait for all in-flight requests to complete if (m_pCurl != nullptr) {