From 00998d54432abb578b711a441cb1badb4ede0ba0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 17 Dec 2018 14:29:11 +0900 Subject: [PATCH] Fix web requests not getting correctly handled on first connection --- osu.Game/Online/API/APIAccess.cs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index a1376b8b94..57dd4f1568 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -141,7 +141,7 @@ namespace osu.Game.Online.API State = APIState.Online; }; - if (!handleRequest(userReq)) + if (!handleRequest(userReq, out _)) { Thread.Sleep(500); continue; @@ -170,11 +170,15 @@ namespace osu.Game.Online.API lock (queue) { if (queue.Count == 0) break; - req = queue.Dequeue(); + req = queue.Peek(); } // TODO: handle failures better - handleRequest(req); + handleRequest(req, out var removeFromQueue); + + if (removeFromQueue) + lock (queue) + queue.Dequeue(); } Thread.Sleep(50); @@ -193,9 +197,11 @@ namespace osu.Game.Online.API /// Handle a single API request. /// /// The request. - /// true if we should remove this request from the queue. - private bool handleRequest(APIRequest req) + /// true if the request succeeded. + private bool handleRequest(APIRequest req, out bool removeFromQueue) { + removeFromQueue = true; + try { Logger.Log($@"Performing request {req}", LoggingTarget.Network); @@ -216,12 +222,12 @@ namespace osu.Game.Online.API } catch (WebException we) { - var removeFromQueue = handleWebException(we); + removeFromQueue = handleWebException(we); if (removeFromQueue) req.Fail(we); - return removeFromQueue; + return false; } catch (Exception e) { @@ -229,7 +235,7 @@ namespace osu.Game.Online.API log.Add(@"API level timeout exception was hit"); req.Fail(e); - return true; + return false; } }