Fix carousel filter debounce causing a race condition

Clicking a ruleset button on toolbar would schedule a delayed filter of carousel, which could in turn trigger a beatmap change after pushing a Player. This resolves that by forcing any pending operations to complete.
This commit is contained in:
Dean Herbert
2017-07-21 05:58:58 +09:00
parent 31ac083408
commit fb2f1224b3
2 changed files with 12 additions and 5 deletions

View File

@ -198,13 +198,16 @@ namespace osu.Game.Screens.Select
private void carouselRaisedStart()
{
var pendingSelection = selectionChangedDebounce;
selectionChangedDebounce = null;
if (carousel.PendingFilter)
// if we have a pending filter operation, we want to run it now.
// it could change selection (ie. if the ruleset has been changed).
carousel.Filter(null, false);
if (pendingSelection?.Completed == false)
if (selectionChangedDebounce?.Completed == false)
{
pendingSelection.RunTask();
pendingSelection.Cancel(); // cancel the already scheduled task.
selectionChangedDebounce.RunTask();
selectionChangedDebounce.Cancel(); // cancel the already scheduled task.
selectionChangedDebounce = null;
}
OnSelected();