diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 8bd1f92f7c16991185309a6e9848a7f7534dd861..e103df977a78d96f3d6c250f86dee2fb2fd5386d 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -492,8 +492,6 @@ GMainWindow::~GMainWindow() {
         delete render_window;
     }
 
-    system->GetRoomNetwork().Shutdown();
-
 #ifdef __linux__
     ::close(sig_interrupt_fds[0]);
     ::close(sig_interrupt_fds[1]);
@@ -3831,6 +3829,7 @@ void GMainWindow::closeEvent(QCloseEvent* event) {
 
     render_window->close();
     multiplayer_state->Close();
+    system->GetRoomNetwork().Shutdown();
 
     QWidget::closeEvent(event);
 }
diff --git a/src/yuzu/multiplayer/state.cpp b/src/yuzu/multiplayer/state.cpp
index 84ea1aa4cbf07756cb3e29722ae7b986f992846a..dba76b22b05cb3f7e2d3bda56e650a854ee0b89f 100644
--- a/src/yuzu/multiplayer/state.cpp
+++ b/src/yuzu/multiplayer/state.cpp
@@ -59,7 +59,9 @@ MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_lis
             });
 }
 
-MultiplayerState::~MultiplayerState() {
+MultiplayerState::~MultiplayerState() = default;
+
+void MultiplayerState::Close() {
     if (state_callback_handle) {
         if (auto member = room_network.GetRoomMember().lock()) {
             member->Unbind(state_callback_handle);
@@ -71,9 +73,6 @@ MultiplayerState::~MultiplayerState() {
             member->Unbind(error_callback_handle);
         }
     }
-}
-
-void MultiplayerState::Close() {
     if (host_room) {
         host_room->close();
     }