From c7726f13e87c87d2516c93ecb008b1606013f481 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 20 Apr 2018 00:39:01 -0600 Subject: [PATCH] Frontend: Prevent a crash from closing a hosted room using the Disconnect button and then trying to host another room --- src/citra_qt/multiplayer/client_room.cpp | 8 +++----- src/citra_qt/multiplayer/state.cpp | 2 ++ src/citra_qt/multiplayer/state.h | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/citra_qt/multiplayer/client_room.cpp b/src/citra_qt/multiplayer/client_room.cpp index 60f488587..88bc132ef 100644 --- a/src/citra_qt/multiplayer/client_room.cpp +++ b/src/citra_qt/multiplayer/client_room.cpp @@ -13,6 +13,7 @@ #include "citra_qt/game_list_p.h" #include "citra_qt/multiplayer/client_room.h" #include "citra_qt/multiplayer/message.h" +#include "citra_qt/multiplayer/state.h" #include "common/logging/log.h" #include "core/announce_multiplayer_session.h" #include "ui_client_room.h" @@ -57,11 +58,8 @@ void ClientRoomWindow::OnStateChange(const Network::RoomMember::State& state) { } void ClientRoomWindow::Disconnect() { - if (!NetworkMessage::WarnDisconnect()) { - return; - } - if (auto member = Network::GetRoomMember().lock()) { - member->Leave(); + auto parent = static_cast(parentWidget()); + if (!parent->OnCloseRoom()) { ui->chat->AppendStatusMessage(tr("Disconnected")); close(); } diff --git a/src/citra_qt/multiplayer/state.cpp b/src/citra_qt/multiplayer/state.cpp index dfd5ee66f..e6a86e1fa 100644 --- a/src/citra_qt/multiplayer/state.cpp +++ b/src/citra_qt/multiplayer/state.cpp @@ -147,6 +147,7 @@ bool MultiplayerState::OnCloseRoom() { // if you are in a room, leave it if (auto member = Network::GetRoomMember().lock()) { member->Leave(); + NGLOG_DEBUG(Frontend, "Left the room (as a client)"); } // if you are hosting a room, also stop hosting @@ -155,6 +156,7 @@ bool MultiplayerState::OnCloseRoom() { } room->Destroy(); announce_multiplayer_session->Stop(); + NGLOG_DEBUG(Frontend, "Closed the room (as a server)"); } return true; } diff --git a/src/citra_qt/multiplayer/state.h b/src/citra_qt/multiplayer/state.h index 673bc6ecf..3500ff5df 100644 --- a/src/citra_qt/multiplayer/state.h +++ b/src/citra_qt/multiplayer/state.h @@ -5,6 +5,7 @@ #pragma once #include +#include "core/announce_multiplayer_session.h" #include "network/network.h" class QStandardItemModel;