From 28000c8bb927128bb580cbf141776d4c3cb2d00d Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:20:07 +0000 Subject: [PATCH] HTTP: Clear callbacks on HTTP requests during shutdown to prevent crashes --- .../GameNetwork/GeneralsOnline/HTTP/HTTPRequest.h | 8 ++++++++ .../GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp | 9 +++++++++ 2 files changed, 17 insertions(+) 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) {