diff options
| author | 2022-08-03 19:45:13 +0200 | |
|---|---|---|
| committer | 2022-08-15 20:25:42 +0200 | |
| commit | 72ff5cd4452b51648d91f952c5820cc9b6dfab68 (patch) | |
| tree | 8f111c6ec9513d22db27d7b397afad5c7753c1b7 /src | |
| parent | internal_network: Fix mingw compilation (diff) | |
| download | yuzu-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.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/multiplayer/state.cpp | 7 |
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 | ||
| 62 | MultiplayerState::~MultiplayerState() { | 62 | MultiplayerState::~MultiplayerState() = default; |
| 63 | |||
| 64 | void 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 | |||
| 76 | void MultiplayerState::Close() { | ||
| 77 | if (host_room) { | 76 | if (host_room) { |
| 78 | host_room->close(); | 77 | host_room->close(); |
| 79 | } | 78 | } |