diff --git a/osu.Game/Online/Multiplayer/StatefulMultiplayerClient.cs b/osu.Game/Online/Multiplayer/StatefulMultiplayerClient.cs
index cd89b0a3e8..fbdfb6a8c5 100644
--- a/osu.Game/Online/Multiplayer/StatefulMultiplayerClient.cs
+++ b/osu.Game/Online/Multiplayer/StatefulMultiplayerClient.cs
@@ -52,6 +52,7 @@ namespace osu.Game.Online.Multiplayer
///
/// Whether the is currently connected.
+ /// This is NOT thread safe and usage should be scheduled.
///
public abstract IBindable IsConnected { get; }
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/CreateMultiplayerMatchButton.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/CreateMultiplayerMatchButton.cs
index 87b0e49b5b..a13d2cf540 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/CreateMultiplayerMatchButton.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/CreateMultiplayerMatchButton.cs
@@ -34,8 +34,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
{
base.LoadComplete();
- isConnected.BindValueChanged(_ => updateState());
- operationInProgress.BindValueChanged(_ => updateState(), true);
+ isConnected.BindValueChanged(_ => Scheduler.AddOnce(updateState));
+ operationInProgress.BindValueChanged(_ => Scheduler.AddOnce(updateState), true);
}
private void updateState() => Enabled.Value = isConnected.Value && !operationInProgress.Value;
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs
index 4bee502e2e..04d9e0a72a 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs
@@ -77,14 +77,14 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
});
isConnected = client.IsConnected.GetBoundCopy();
- isConnected.BindValueChanged(connected =>
+ isConnected.BindValueChanged(connected => Schedule(() =>
{
if (!connected.NewValue)
{
// messaging to the user about this disconnect will be provided by the MultiplayerMatchSubScreen.
failAndBail();
}
- }, true);
+ }), true);
Debug.Assert(client.Room != null);
}
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerRoomManager.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerRoomManager.cs
index 3cb263298f..61d8896732 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerRoomManager.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerRoomManager.cs
@@ -34,10 +34,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
base.LoadComplete();
isConnected.BindTo(multiplayerClient.IsConnected);
- isConnected.BindValueChanged(_ => Schedule(updatePolling));
- JoinedRoom.BindValueChanged(_ => updatePolling());
-
- updatePolling();
+ isConnected.BindValueChanged(_ => Scheduler.AddOnce(updatePolling));
+ JoinedRoom.BindValueChanged(_ => Scheduler.AddOnce(updatePolling), true);
}
public override void CreateRoom(Room room, Action onSuccess = null, Action onError = null)