diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-10-11 16:08:46 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-10-12 10:09:23 +0000 |
commit | 4861070b6d7ac1d757d651d7ce066fe755056643 (patch) | |
tree | c7c00d12a187bf0da3e2f20867895d4830de9fd7 | |
parent | d749ce52378ca13d4a3d4952991e6e743085a135 (diff) |
Add missing mutex to JobObserver class
The cancel() call can come from a different thread.
Change-Id: I3450dad49917f0efc3826924e7b780bae31ead66
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/lib/corelib/api/internaljobs.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/lib/corelib/api/internaljobs.cpp b/src/lib/corelib/api/internaljobs.cpp index f6bcba765..a68e0cfa9 100644 --- a/src/lib/corelib/api/internaljobs.cpp +++ b/src/lib/corelib/api/internaljobs.cpp @@ -63,6 +63,8 @@ #include <QtCore/qscopedpointer.h> #include <QtCore/qtimer.h> +#include <mutex> + namespace qbs { namespace Internal { @@ -72,7 +74,11 @@ public: JobObserver(InternalJob *job) : m_canceled(false), m_job(job), m_timedLogger(0) { } ~JobObserver() { delete m_timedLogger; } - void cancel() { m_canceled = true; } + void cancel() + { + std::lock_guard<std::mutex> lock(m_cancelMutex); + m_canceled = true; + } private: void initialize(const QString &task, int maximum) override @@ -105,10 +111,15 @@ private: int progressValue() override { return m_value; } int maximum() const override { return m_maximum; } - bool canceled() const override { return m_canceled; } + bool canceled() const override + { + std::lock_guard<std::mutex> lock(m_cancelMutex); + return m_canceled; + } int m_value; int m_maximum; + mutable std::mutex m_cancelMutex; bool m_canceled; InternalJob * const m_job; TimedActivityLogger *m_timedLogger; |