aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-10-11 16:08:46 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-10-12 10:09:23 +0000
commit4861070b6d7ac1d757d651d7ce066fe755056643 (patch)
treec7c00d12a187bf0da3e2f20867895d4830de9fd7
parentd749ce52378ca13d4a3d4952991e6e743085a135 (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.cpp15
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;