From f8f8b58da81f1fefd6aa319df9fb50e8903801cc Mon Sep 17 00:00:00 2001 From: John Fultz Date: Thu, 10 Jan 2019 22:41:33 -0600 Subject: Fix potential crash on exit. Start Championship Player, then exit while the player is still thinking could crash. --- quacker/quacker.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'quacker/quacker.cpp') diff --git a/quacker/quacker.cpp b/quacker/quacker.cpp index d64324c..0d5514d 100644 --- a/quacker/quacker.cpp +++ b/quacker/quacker.cpp @@ -89,6 +89,13 @@ TopLevel::TopLevel(QWidget *parent) TopLevel::~TopLevel() { + stopEverything(); + for (const auto& it : m_otherOppoThreads) + it->wait(); + for (const auto& it : m_oppoThreads) + it->wait(); + kibitzThreadFinished(); + computerPlayerDone(); QuackleIO::Queenie::cleanUp(); delete m_game; delete m_simulator; @@ -914,6 +921,8 @@ void TopLevel::kibitz(int numberOfPlays, Quackle::ComputerPlayer *computerPlayer void TopLevel::kibitzThreadFinished() { + if (m_otherOppoThreads.begin() == m_otherOppoThreads.end()) + return; QString name; QString rack; for (QList::iterator it = m_otherOppoThreads.begin(); it != m_otherOppoThreads.end(); ) @@ -1446,6 +1455,9 @@ void TopLevel::stopOutcraftyingCurrentPlayer() void TopLevel::computerPlayerDone() { + if (m_oppoThreads.begin() == m_oppoThreads.end()) + return; + Quackle::MoveList moves; for (QList::iterator it = m_oppoThreads.begin(); it != m_oppoThreads.end(); ) -- cgit v1.2.3