diff options
author | John Fultz <jfultz@wolfram.com> | 2019-01-10 22:41:33 -0600 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2019-01-13 10:26:45 -0600 |
commit | f8f8b58da81f1fefd6aa319df9fb50e8903801cc (patch) | |
tree | 01a12a87f10e961094d1f256100e034918e9553d /quacker/quacker.cpp | |
parent | 0c544662ded7bbc90ad04cd5e250f28b4894333a (diff) |
Fix potential crash on exit.
Start Championship Player, then exit while
the player is still thinking could crash.
Diffstat (limited to 'quacker/quacker.cpp')
-rw-r--r-- | quacker/quacker.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
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<OppoThread *>::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<OppoThread *>::iterator it = m_oppoThreads.begin(); it != m_oppoThreads.end(); ) |