summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformintegration.cpp
diff options
context:
space:
mode:
authorChristian Stromme <christian.stromme@qt.io>2017-06-07 15:46:07 +0200
committerChristian Stromme <christian.stromme@qt.io>2017-07-03 14:38:01 +0000
commit5dcd9491454390b198db1d2ab45b0b418d926cde (patch)
tree5395d043d1836bbb23b29e06ebc9ea8ddcc995f1 /src/plugins/platforms/android/qandroidplatformintegration.cpp
parent5c144a72d5f9b376a0351e9dcf6f0a4c8cc91294 (diff)
Android: Add lock to protect access to the platform interface
Fixes dubious lock protecting the platform interface handle, and makes sure that we lock and hold a valid reference to the platform interface before accessing it. Since the platform interface is exposed we also need to expose the mutex protecting it. Change-Id: I1ec1219a75c589bc793676369b11fb403de20102 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformintegration.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index 403badb2e1..7185b573cd 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -121,8 +121,13 @@ void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteA
void QAndroidPlatformNativeInterface::customEvent(QEvent *event)
{
- if (event->type() == QEvent::User)
- QtAndroid::setAndroidPlatformIntegration(static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration()));
+ if (event->type() != QEvent::User)
+ return;
+
+ QMutexLocker lock(QtAndroid::platformInterfaceMutex());
+ QAndroidPlatformIntegration *api = static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ QtAndroid::setAndroidPlatformIntegration(api);
+ api->flushPendingUpdates();
}
QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList &paramList)