summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2017-03-01 17:39:25 +0200
committerBogDan Vatra <bogdan@kdab.com>2017-03-23 12:02:08 +0000
commit6ca7e592a8af949cd5f8efe5791bbd42b7b8bf0e (patch)
tree099be42bfce54b83ad14f5116d56e490310ddb71
parent474b19afa9a562d601e22a70b142a5818c6afba6 (diff)
Fix hang on sleep/wakeup
This patch fixes the followings: - call "it.value()" only on valid iterators - destroySurface() doesn't remove the surfaceId from m_surfaces - the surfaceId is removed from m_surfaces when the QtSurface is really destroyed Task-number: QTBUG-59185 Change-Id: Iee37dde16fee16f19906812c55c1f0b0279b033c Reviewed-by: Mathias Hasselmann <mathias.hasselmann@kdab.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit da4b91e2b2c6bb7949e2151a72be1f11c28768d6)
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 69c590940f..8380a97d00 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -392,11 +392,6 @@ namespace QtAndroid
if (surfaceId == -1)
return;
- QMutexLocker lock(&m_surfacesMutex);
- const auto &it = m_surfaces.find(surfaceId);
- if (it != m_surfaces.end())
- m_surfaces.remove(surfaceId);
-
QJNIEnvironmentPrivate env;
if (!env)
return;
@@ -572,14 +567,18 @@ static void setSurface(JNIEnv *env, jobject /*thiz*/, jint id, jobject jSurface,
{
QMutexLocker lock(&m_surfacesMutex);
const auto &it = m_surfaces.find(id);
- if (it.value() == nullptr) // This should never happen...
- return;
-
if (it == m_surfaces.end()) {
qWarning()<<"Can't find surface" << id;
return;
}
- it.value()->surfaceChanged(env, jSurface, w, h);
+ auto surfaceClient = it.value();
+ if (!surfaceClient) // This should never happen...
+ return;
+
+ surfaceClient->surfaceChanged(env, jSurface, w, h);
+
+ if (!jSurface)
+ m_surfaces.erase(it);
}
static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/,