From 1a3df84f0af9efd3a02c922d8b9df23b0c1f9fc6 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:27:26 -0800 Subject: [PATCH] fix segfault on exit if any closable tabs were open (#5435) --- cockatrice/src/client/tabs/tab_supervisor.cpp | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 10b6265a6..27320218b 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -304,19 +304,28 @@ void TabSupervisor::stop() tabAdmin = 0; tabLog = 0; - QMapIterator roomIterator(roomTabs); - while (roomIterator.hasNext()) - roomIterator.next().value()->deleteLater(); + for (const auto tab : deckEditorTabs) { + disconnect(tab, nullptr, this, nullptr); + tab->deleteLater(); + } + deckEditorTabs.clear(); + + for (auto i = roomTabs.cbegin(), end = roomTabs.cend(); i != end; ++i) { + disconnect(i.value(), nullptr, this, nullptr); + i.value()->deleteLater(); + } roomTabs.clear(); - QMapIterator gameIterator(gameTabs); - while (gameIterator.hasNext()) - gameIterator.next().value()->deleteLater(); + for (auto i = gameTabs.cbegin(), end = gameTabs.cend(); i != end; ++i) { + disconnect(i.value(), nullptr, this, nullptr); + i.value()->deleteLater(); + } gameTabs.clear(); - QListIterator replayIterator(replayTabs); - while (replayIterator.hasNext()) - replayIterator.next()->deleteLater(); + for (const auto tab : replayTabs) { + disconnect(tab, nullptr, this, nullptr); + tab->deleteLater(); + } replayTabs.clear(); delete userInfo;