summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar FearlessTobi2022-08-03 19:45:13 +0200
committerGravatar FearlessTobi2022-08-15 20:25:42 +0200
commit72ff5cd4452b51648d91f952c5820cc9b6dfab68 (patch)
tree8f111c6ec9513d22db27d7b397afad5c7753c1b7 /src
parentinternal_network: Fix mingw compilation (diff)
downloadyuzu-72ff5cd4452b51648d91f952c5820cc9b6dfab68.tar.gz
yuzu-72ff5cd4452b51648d91f952c5820cc9b6dfab68.tar.xz
yuzu-72ff5cd4452b51648d91f952c5820cc9b6dfab68.zip
yuzu: Fix crash on shutdown
Previously, accessing the room_network when it was already freed would crash the emulator on shutdown. Co-Authored-By: Narr the Reg <5944268+german77@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/main.cpp3
-rw-r--r--src/yuzu/multiplayer/state.cpp7
2 files changed, 4 insertions, 6 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 8bd1f92f7..e103df977 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -492,8 +492,6 @@ GMainWindow::~GMainWindow() {
492 delete render_window; 492 delete render_window;
493 } 493 }
494 494
495 system->GetRoomNetwork().Shutdown();
496
497#ifdef __linux__ 495#ifdef __linux__
498 ::close(sig_interrupt_fds[0]); 496 ::close(sig_interrupt_fds[0]);
499 ::close(sig_interrupt_fds[1]); 497 ::close(sig_interrupt_fds[1]);
@@ -3831,6 +3829,7 @@ void GMainWindow::closeEvent(QCloseEvent* event) {
3831 3829
3832 render_window->close(); 3830 render_window->close();
3833 multiplayer_state->Close(); 3831 multiplayer_state->Close();
3832 system->GetRoomNetwork().Shutdown();
3834 3833
3835 QWidget::closeEvent(event); 3834 QWidget::closeEvent(event);
3836} 3835}
diff --git a/src/yuzu/multiplayer/state.cpp b/src/yuzu/multiplayer/state.cpp
index 84ea1aa4c..dba76b22b 100644
--- a/src/yuzu/multiplayer/state.cpp
+++ b/src/yuzu/multiplayer/state.cpp
@@ -59,7 +59,9 @@ MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_lis
59 }); 59 });
60} 60}
61 61
62MultiplayerState::~MultiplayerState() { 62MultiplayerState::~MultiplayerState() = default;
63
64void MultiplayerState::Close() {
63 if (state_callback_handle) { 65 if (state_callback_handle) {
64 if (auto member = room_network.GetRoomMember().lock()) { 66 if (auto member = room_network.GetRoomMember().lock()) {
65 member->Unbind(state_callback_handle); 67 member->Unbind(state_callback_handle);
@@ -71,9 +73,6 @@ MultiplayerState::~MultiplayerState() {
71 member->Unbind(error_callback_handle); 73 member->Unbind(error_callback_handle);
72 } 74 }
73 } 75 }
74}
75
76void MultiplayerState::Close() {
77 if (host_room) { 76 if (host_room) {
78 host_room->close(); 77 host_room->close();
79 } 78 }