aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Komissarov <ABBAPOH@gmail.com>2020-06-01 11:37:19 +0200
committerRichard Weickelt <richard@weickelt.de>2020-06-16 09:32:16 +0000
commit0e565ceb0f6142b04411944fbadbaf2b2acd2bb2 (patch)
treed2dce8058b14e871ab0721be3ac747d85766f399 /src
parentdd37b75d9a8a1b9b32de8bfbaacbf8e2e2458e2e (diff)
Fix possible race in ~InternalJobThreadWrapper()
It might happen that finished() is emitted before the call to connect() to the QEventLoop::quit slot resulting in endless loop. Fix that by calling QCoreApplication::processEvents() directly. Change-Id: Ic0899c4d5b04d095b26912b9693ae245df6da4f2 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/api/internaljobs.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/lib/corelib/api/internaljobs.cpp b/src/lib/corelib/api/internaljobs.cpp
index c53cf3e33..0fabc6279 100644
--- a/src/lib/corelib/api/internaljobs.cpp
+++ b/src/lib/corelib/api/internaljobs.cpp
@@ -59,7 +59,6 @@
#include <tools/preferences.h>
#include <tools/qbsassert.h>
-#include <QtCore/qeventloop.h>
#include <QtCore/qtimer.h>
#include <mutex>
@@ -194,14 +193,14 @@ InternalJobThreadWrapper::InternalJobThreadWrapper(InternalJob *synchronousJob,
InternalJobThreadWrapper::~InternalJobThreadWrapper()
{
if (m_running) {
- QEventLoop loop;
- connect(m_job, &InternalJob::finished, &loop, &QEventLoop::quit);
cancel();
- loop.exec();
+ while (m_running)
+ QCoreApplication::processEvents();
}
m_thread.quit();
m_thread.wait();
delete m_job;
+ m_job = nullptr;
}
void InternalJobThreadWrapper::start()