submitFromFailOrQuit() fires, calls submitScore(), which creates scoreSubmissionSource and then bails because nothing was hit
On the fail overlay, requesting save of replay calls prepareAndImportScoreAsync() goes into the same submission flow and submitScore(), which notices that scoreSubmissionSource already exists, thus presuming that submission is actively taking place and waiting for that to complete, while in fact submission is not happening and the wait will last forever.
I previously stated pretty categorically that score import going into the submission flow looked pretty flagrantly wrong, but I'll eat crow now and double back on that - there are valid reasons to wait for submission on import, first and foremost being correct population of the online score ID. The fact that the submission logic is spread out between Player and SubmittingPlayer via abstract overrides and local function calls doesn't help in attempting to refactor this further anyway.
Closes https://github.com/ppy/osu/issues/29065.
https://github.com/ppy/osu/issues/29065#issuecomment-2322809652 describes what's happened here already, but just to recap using perhaps more clear wording:
submitFromFailOrQuit()
fires, callssubmitScore()
, which createsscoreSubmissionSource
and then bails because nothing was hitprepareAndImportScoreAsync()
goes into the same submission flow andsubmitScore()
, which notices thatscoreSubmissionSource
already exists, thus presuming that submission is actively taking place and waiting for that to complete, while in fact submission is not happening and the wait will last forever.I previously stated pretty categorically that score import going into the submission flow looked pretty flagrantly wrong, but I'll eat crow now and double back on that - there are valid reasons to wait for submission on import, first and foremost being correct population of the online score ID. The fact that the submission logic is spread out between
Player
andSubmittingPlayer
via abstract overrides and local function calls doesn't help in attempting to refactor this further anyway.