diff options
author | Petri Virkkunen <[email protected]> | 2025-06-17 15:00:02 +0300 |
---|---|---|
committer | Petri Virkkunen <[email protected]> | 2025-06-22 12:37:30 +0000 |
commit | 919e9689ff3024b0187f98bff29fd872871aa373 (patch) | |
tree | debfcd518398a068ead48645a19e1856328e09af | |
parent | 991d9607b5b61d96126efe3eddc131419533d581 (diff) |
QtQuickViewContent calls to QMetaProperty functionality from the Android thread was leading to SIGSEGV crashes
Fixes: QTBUG-136235
Pick-to: 6.10 6.9 6.8
Change-Id: Ib1fcebf455b12eee6e7f17fea3235f50d156c60c
Reviewed-by: Assam Boudjelthia <[email protected]>
-rw-r--r-- | src/quick/platform/android/qandroidquickviewembedding.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/quick/platform/android/qandroidquickviewembedding.cpp b/src/quick/platform/android/qandroidquickviewembedding.cpp index 0714b1fae4..293667f23b 100644 --- a/src/quick/platform/android/qandroidquickviewembedding.cpp +++ b/src/quick/platform/android/qandroidquickviewembedding.cpp @@ -100,7 +100,6 @@ namespace QtAndroidQuickViewEmbedding return; } - QMetaProperty metaProperty = rootMetaObject->property(propertyIndex); const QJniObject propertyValue(value); const QVariant variantToWrite = QAndroidTypeConverter::toQVariant(propertyValue); @@ -108,7 +107,12 @@ namespace QtAndroidQuickViewEmbedding qWarning("Setting the property type of %s is not supported.", propertyValue.className().data()); } else { - metaProperty.write(rootObject, variantToWrite); + QMetaObject::invokeMethod(rootObject, + [metaProperty = rootMetaObject->property(propertyIndex), + rootObject = rootObject, + variantToWrite] { + metaProperty.write(rootObject, variantToWrite); + }); } } @@ -134,7 +138,15 @@ namespace QtAndroidQuickViewEmbedding } QMetaProperty metaProperty = rootMetaObject->property(propertyIndex); - const QVariant propertyValue = metaProperty.read(rootObject); + QVariant propertyValue; + if (QCoreApplication::instance()->thread()->isCurrentThread()) { + propertyValue = metaProperty.read(rootObject); + } else { + QMetaObject::invokeMethod(rootObject, + [&propertyValue, &metaProperty, rootObject = rootObject] { + propertyValue = metaProperty.read(rootObject); + }, Qt::BlockingQueuedConnection); + } jobject jObject = QAndroidTypeConverter::toJavaObject(propertyValue, env); if (!jObject) { qWarning("Property %s cannot be converted to a supported Java data type.", |