From cd0341e1f08218990b17e2c383d560e93c0213f3 Mon Sep 17 00:00:00 2001 From: Ibra Date: Sat, 27 Jun 2026 16:42:47 +0300 Subject: [PATCH] fix: Fix game hang when taking screenshots --- .../GeneralsOnline/OnlineServices_Init.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp index cb4c36b4d47..270a395aadb 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_Init.cpp @@ -592,7 +592,7 @@ void NGMP_OnlineServicesManager::CaptureScreenshot(bool bResizeForTransmit, std: memcpy(pixelData.data(), pBits, height * pitch); // process on thread - track the thread so we can join it during shutdown - std::thread* pNewThread = new std::thread([cbOnDataAvailable, width, height, pixelData = std::move(pixelData), pDXsurf, pitch, bResizeForTransmit]() + std::thread* pNewThread = new std::thread([cbOnDataAvailable, width, height, pixelData = std::move(pixelData), pitch, bResizeForTransmit]() { CHECK_WORKER_THREAD; @@ -654,11 +654,6 @@ void NGMP_OnlineServicesManager::CaptureScreenshot(bool bResizeForTransmit, std: delete[] rgbData; rgbData = nullptr; - if (pDXsurf != nullptr) - { - pDXsurf->Release(); - } - // invoke cb if (cbOnDataAvailable != nullptr) { @@ -715,12 +710,10 @@ void NGMP_OnlineServicesManager::CaptureScreenshot(bool bResizeForTransmit, std: surfaceCopy = nullptr; } - if (!bSucceeded) // if success, thread uses this and then destroys it + if (pDXsurf != nullptr) { - if (pDXsurf != nullptr) - { - pDXsurf->Release(); - } + pDXsurf->Release(); + pDXsurf = nullptr; } // callback if failed