Skip to content

Commit eea97ee

Browse files
committed
fix #41: Do not start the event loop during destruction of ProjectLoader
1 parent a81e0c6 commit eea97ee

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

ScratchCPPGui/projectloader.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ ProjectLoader::ProjectLoader(QObject *parent) :
4343

4444
ProjectLoader::~ProjectLoader()
4545
{
46+
m_stopLoading = true;
47+
4648
if (m_loadThread.isRunning())
4749
m_loadThread.waitForFinished();
4850

@@ -88,6 +90,7 @@ void ProjectLoader::setFileName(const QString &newFileName)
8890
emit loadStatusChanged();
8991
emit fileNameChanged();
9092

93+
m_stopLoading = false;
9194
m_loadThread = QtConcurrent::run(&callLoad, this);
9295
}
9396

@@ -193,7 +196,8 @@ void ProjectLoader::load()
193196

194197
m_sprites.clear();
195198

196-
if (!m_engine) {
199+
if (!m_engine || m_stopLoading) {
200+
m_engineMutex.unlock();
197201
emit fileNameChanged();
198202
emit loadStatusChanged();
199203
emit loadingFinished();
@@ -226,6 +230,16 @@ void ProjectLoader::load()
226230
}
227231
}
228232

233+
if (m_stopLoading) {
234+
m_engineMutex.unlock();
235+
emit fileNameChanged();
236+
emit loadStatusChanged();
237+
emit loadingFinished();
238+
emit engineChanged();
239+
emit spritesChanged();
240+
return;
241+
}
242+
229243
// Run event loop
230244
m_engine->setSpriteFencingEnabled(false);
231245

ScratchCPPGui/projectloader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class ProjectLoader : public QObject
123123
bool m_eventLoopEnabled = true;
124124
std::atomic<unsigned int> m_downloadedAssets = 0;
125125
std::atomic<unsigned int> m_assetCount = 0;
126+
std::atomic<bool> m_stopLoading = false;
126127
};
127128

128129
} // namespace scratchcppgui

0 commit comments

Comments
 (0)