diff --git a/osu.Game/Online/Multiplayer/IMultiplayerRoomServer.cs b/osu.Game/Online/Multiplayer/IMultiplayerRoomServer.cs
index 169d5d1b83..836b9efb10 100644
--- a/osu.Game/Online/Multiplayer/IMultiplayerRoomServer.cs
+++ b/osu.Game/Online/Multiplayer/IMultiplayerRoomServer.cs
@@ -16,7 +16,6 @@ namespace osu.Game.Online.Multiplayer
///
/// Request to leave the currently joined room.
///
- /// If the user is not in a room.
Task LeaveRoom();
///
diff --git a/osu.Game/Online/Multiplayer/MultiplayerClient.cs b/osu.Game/Online/Multiplayer/MultiplayerClient.cs
index 4f223cc1ab..59a26d5ba7 100644
--- a/osu.Game/Online/Multiplayer/MultiplayerClient.cs
+++ b/osu.Game/Online/Multiplayer/MultiplayerClient.cs
@@ -319,9 +319,6 @@ namespace osu.Game.Online.Multiplayer
public Task LeaveRoom()
{
- if (Room == null)
- return Task.CompletedTask;
-
// The join may have not completed yet, so certain tasks that either update the room or reference the room should be cancelled.
// This includes the setting of Room itself along with the initial update of the room settings on join.
joinCancellationSource?.Cancel();
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Multiplayer.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Multiplayer.cs
index eb387b2664..b58041aa6f 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/Multiplayer.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Multiplayer.cs
@@ -90,6 +90,15 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
client.ChangeState(MultiplayerUserState.Idle).FireAndForget();
}
+ public override bool OnExiting(ScreenExitEvent e)
+ {
+ if (base.OnExiting(e))
+ return true;
+
+ client.LeaveRoom().FireAndForget();
+ return false;
+ }
+
protected override string ScreenTitle => "Multiplayer";
protected override LoungeSubScreen CreateLounge() => new MultiplayerLoungeSubScreen();