osu/osu.Game/Screens
Bartłomiej Dach 86a8ab6db6
Fix quick retry immediately after completion marking score as failed
Closes https://github.com/ppy/osu/issues/25247.

The scenario involved here is as follows:

1. User completes beatmap by hitting all notes.
2. `checkScoreCompleted()` determines completion, and calls
   `progressToResults(withDelay: true)`.
3. `progressToResults()` schedules `resultsDisplayDelegate`, which
   includes a call to `prepareAndImportScoreAsync()`, a second in the
   future.
4. User presses quick retry hotkey.
   This calls `Player.Restart(quickRestart: true)`,
   which invokes `Player.RestartRequested`,
   which in turn calls `PlayerLoader.restartRequested(true)`,
   which in turn causes `PlayerLoader` to make itself current,
   which means that `Player.OnExiting()` will get called.
5. `Player.OnExiting()` sees that `prepareScoreForDisplayTask` is null
   (because `prepareAndImportScoreAsync()` - which sets it -
   is scheduled to happen in the future), and as such assumes that
   the score did not complete. Thus, it marks the score as failed.
6. `Player.Restart()` after invoking `RestartRequested` calls
   `PerformExit(false)`, which then will unconditionally call
   `prepareAndImportScoreAsync()`. But the score has already been marked
   as failed.

The flow above can be described as "convoluted", but I'm not sure I have
it in me right now to try and refactor it again. Therefore, to fix,
switch the `prepareScoreForDisplayTask` null check in
`Player.OnExiting()` to check `GameplayState.HasPassed` instead, as it
is not susceptible to the same out-of-order read issue.
2023-10-27 12:17:03 +02:00
..
Backgrounds Fix various other inspections 2023-10-17 17:48:51 +09:00
Edit Fix editor not prompting before saving beatmap for export 2023-10-25 14:39:46 +09:00
Import
Menu Also support `D` for those with muscle memory from stable 2023-10-20 12:22:00 +02:00
OnlinePlay Bypass `Parent` nullability checks for now 2023-10-17 17:48:45 +09:00
Play Fix quick retry immediately after completion marking score as failed 2023-10-27 12:17:03 +02:00
Ranking Bypass `Parent` nullability checks for now 2023-10-17 17:48:45 +09:00
Select Fix left side of carousel blocking volume adjust hotkeys 2023-10-26 16:26:35 +02:00
Spectate
Utility
BackgroundScreen.cs
BackgroundScreenStack.cs
IHandlePresentBeatmap.cs
IHasSubScreenStack.cs
IOsuScreen.cs
IPerformFromScreenRunner.cs
Loader.cs
OsuScreen.cs Fix various other inspections 2023-10-17 17:48:51 +09:00
OsuScreenDependencies.cs
OsuScreenStack.cs
ScorePresentType.cs
ScreenWhiteBox.cs
StartupScreen.cs