diff options
author | Vyacheslav Koscheev <v.koscheev@2gis.ru> | 2017-01-26 14:07:48 +0700 |
---|---|---|
committer | Vyacheslav Koscheev <vok1980@gmail.com> | 2017-02-07 08:40:40 +0000 |
commit | d0b8356e7efcb546bf8838b01b94840e4c0d3ab3 (patch) | |
tree | 70026eef738fa508f41a3b8ab0c2a10fee13f98f /src/plugins/platforms | |
parent | 2294d1fb1a778b13d2514e7bb92e80b9cc4c6356 (diff) |
Android: Fix data race in QAndroidEventDispatcherStopper
Change-Id: If5f8406d7af2d91e267a0ba380e73287feabac9f
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/android/qandroideventdispatcher.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/android/qandroideventdispatcher.h | 4 |
2 files changed, 4 insertions, 6 deletions
diff --git a/src/plugins/platforms/android/qandroideventdispatcher.cpp b/src/plugins/platforms/android/qandroideventdispatcher.cpp index 104e905b8f..e12551283f 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.cpp +++ b/src/plugins/platforms/android/qandroideventdispatcher.cpp @@ -108,10 +108,9 @@ QAndroidEventDispatcherStopper *QAndroidEventDispatcherStopper::instance() void QAndroidEventDispatcherStopper::startAll() { QMutexLocker lock(&m_mutex); - if (started) + if (!m_started.testAndSetOrdered(0, 1)) return; - started = true; for (QAndroidEventDispatcher *d : qAsConst(m_dispatchers)) d->start(); } @@ -119,10 +118,9 @@ void QAndroidEventDispatcherStopper::startAll() void QAndroidEventDispatcherStopper::stopAll() { QMutexLocker lock(&m_mutex); - if (!started) + if (!m_started.testAndSetOrdered(1, 0)) return; - started = false; for (QAndroidEventDispatcher *d : qAsConst(m_dispatchers)) d->stop(); } diff --git a/src/plugins/platforms/android/qandroideventdispatcher.h b/src/plugins/platforms/android/qandroideventdispatcher.h index 057a1660c9..e6f903bced 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.h +++ b/src/plugins/platforms/android/qandroideventdispatcher.h @@ -68,7 +68,7 @@ class QAndroidEventDispatcherStopper { public: static QAndroidEventDispatcherStopper *instance(); - static bool stopped() {return !instance()->started; } + static bool stopped() {return !instance()->m_started.load(); } void startAll(); void stopAll(); void addEventDispatcher(QAndroidEventDispatcher *dispatcher); @@ -77,7 +77,7 @@ public: private: QMutex m_mutex; - bool started = true; + QAtomicInt m_started = 1; QVector<QAndroidEventDispatcher *> m_dispatchers; }; |