From 71d884379dc9f5ecc071df07af7cf830d93d4348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 9 Mar 2026 00:51:39 +0100 Subject: [PATCH] Fix a potential race condition --- Common/Net/HTTPRequest.h | 4 ++++ Core/HLE/sceNetAdhoc.cpp | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Common/Net/HTTPRequest.h b/Common/Net/HTTPRequest.h index 708f6c1b1e..3886e69a1a 100644 --- a/Common/Net/HTTPRequest.h +++ b/Common/Net/HTTPRequest.h @@ -46,6 +46,7 @@ public: if (callback_) { callback_(*this); } + hasRunCallback_ = true; } virtual void Start() = 0; @@ -54,6 +55,8 @@ public: virtual bool Done() = 0; virtual bool Failed() const = 0; + virtual bool HasRunCallback() { return Done() && hasRunCallback_; } + // Returns 1.0 when done. That one value can be compared exactly - or just use Done(). float Progress() const { return progress_.progress; } float SpeedKBps() const { return progress_.kBps; } @@ -87,6 +90,7 @@ protected: Buffer buffer_; bool cancelled_ = false; int resultCode_ = 0; + bool hasRunCallback_ = false; std::vector responseHeaders_; net::RequestProgress progress_; diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 04c8d648e2..203b9c2b0a 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -213,7 +213,8 @@ void AdhocLoadServerList(bool sync) { do { sleep_ms(10, "waiting-for-adhoc-server-list"); g_DownloadManager.Update(); - } while (!dl->Done()); + } while (!dl->HasRunCallback()); + dl.reset(); } g_serverListLoaded = true; } else if (!g_Config.sAdhocServerListUrl.empty()) {