From 1fdde67ff3ae6ec02a06b08ed82e8653f7b066a8 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Tue, 25 Apr 2017 14:58:35 +0200 Subject: QQmlApplicationEngine: Fix using invalid pointers When a root object was deleted before QQmlApplicationEngine the invalid pointers stayed in the list of root objects leading to crashes when destructing QQmlApplicationEngine. Root objects are watched for destruction and removed from the list. Change-Id: I1babab54dbb7d7b16ed883ada5b3e420ca8690cb Reviewed-by: Simon Hausmann --- src/qml/qml/qqmlapplicationengine.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/qml/qml') diff --git a/src/qml/qml/qqmlapplicationengine.cpp b/src/qml/qml/qqmlapplicationengine.cpp index a10dda166c..faab8bf926 100644 --- a/src/qml/qml/qqmlapplicationengine.cpp +++ b/src/qml/qml/qqmlapplicationengine.cpp @@ -57,6 +57,10 @@ QQmlApplicationEnginePrivate::~QQmlApplicationEnginePrivate() void QQmlApplicationEnginePrivate::cleanUp() { + Q_Q(QQmlApplicationEngine); + for (auto obj : qAsConst(objects)) + obj->disconnect(q); + qDeleteAll(objects); #if QT_CONFIG(translation) qDeleteAll(translators); @@ -126,9 +130,12 @@ void QQmlApplicationEnginePrivate::finishLoad(QQmlComponent *c) qWarning() << qPrintable(c->errorString()); q->objectCreated(0, c->url()); break; - case QQmlComponent::Ready: - objects << c->create(); + case QQmlComponent::Ready: { + auto newObj = c->create(); + objects << newObj; + QObject::connect(newObj, &QObject::destroyed, q, [&](QObject *obj) { objects.removeAll(obj); }); q->objectCreated(objects.constLast(), c->url()); + } break; case QQmlComponent::Loading: case QQmlComponent::Null: -- cgit v1.2.3 From a4b35c0830d0a4a01b7013638f8fdd4a989960cf Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 24 Apr 2017 14:24:32 +0200 Subject: Doc: correct link error qqmlengine.cpp: cannot link to LocalStorage.OpenDatabaseSync Change-Id: I37ee96072a1f1973dd501b6c4c2950f51a4224d2 Reviewed-by: Venugopal Shivashankar --- src/qml/qml/qqmlengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/qml/qml') diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 25a301f59f..8478860df8 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -2177,7 +2177,7 @@ QString QQmlEngine::offlineStoragePath() const Returns the file path where a \l{QtQuick.LocalStorage}{Local Storage} database with the identifier \a databaseName is (or would be) located. - \sa LocalStorage.openDatabaseSync() + \sa {openDatabaseSync}{LocalStorage.openDatabaseSync()} \since 5.9 */ QString QQmlEngine::offlineStorageDatabaseFilePath(const QString &databaseName) const -- cgit v1.2.3 From 80dc036882e06763b5202a5966422ba79538a2eb Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 25 Apr 2017 18:08:46 -0300 Subject: Run includemocs in qtdeclarative Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489 Reviewed-by: Lars Knoll --- src/qml/qml/qqmlcomponent.cpp | 2 ++ src/qml/qml/qqmlcontext.cpp | 2 ++ src/qml/qml/qqmldelayedcallqueue.cpp | 2 ++ src/qml/qml/qqmlengine.cpp | 2 ++ src/qml/qml/qqmlextensionplugin.cpp | 2 ++ src/qml/qml/qqmlfileselector.cpp | 2 ++ src/qml/qml/qqmlglobal.cpp | 2 ++ src/qml/qml/qqmllocale.cpp | 2 ++ src/qml/qml/qqmlloggingcategory.cpp | 2 ++ src/qml/qml/qqmlplatform.cpp | 2 ++ src/qml/qml/qqmltypenotavailable.cpp | 2 ++ src/qml/qml/qqmlvaluetype.cpp | 2 ++ 12 files changed, 24 insertions(+) (limited to 'src/qml/qml') diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index a04f47e6a4..ce35846c88 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -1535,3 +1535,5 @@ void QV4::QmlIncubatorObject::statusChanged(QQmlIncubator::Status s) #undef INITIALPROPERTIES_SOURCE QT_END_NAMESPACE + +#include "moc_qqmlcomponent.cpp" diff --git a/src/qml/qml/qqmlcontext.cpp b/src/qml/qml/qqmlcontext.cpp index 018841b9b1..1476c276f4 100644 --- a/src/qml/qml/qqmlcontext.cpp +++ b/src/qml/qml/qqmlcontext.cpp @@ -834,3 +834,5 @@ QString QQmlContextData::urlString() const } QT_END_NAMESPACE + +#include "moc_qqmlcontext.cpp" diff --git a/src/qml/qml/qqmldelayedcallqueue.cpp b/src/qml/qml/qqmldelayedcallqueue.cpp index d5d2c9a28d..13e62ec696 100644 --- a/src/qml/qml/qqmldelayedcallqueue.cpp +++ b/src/qml/qml/qqmldelayedcallqueue.cpp @@ -210,3 +210,5 @@ void QQmlDelayedCallQueue::ticked() } QT_END_NAMESPACE + +#include "moc_qqmldelayedcallqueue_p.cpp" diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 8478860df8..1f6d1f3b57 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -2553,3 +2553,5 @@ bool QQml_isFileCaseCorrect(const QString &fileName, int lengthIn /* = -1 */) */ QT_END_NAMESPACE + +#include "moc_qqmlengine.cpp" diff --git a/src/qml/qml/qqmlextensionplugin.cpp b/src/qml/qml/qqmlextensionplugin.cpp index 097fa71200..b0e6a24616 100644 --- a/src/qml/qml/qqmlextensionplugin.cpp +++ b/src/qml/qml/qqmlextensionplugin.cpp @@ -128,3 +128,5 @@ void QQmlExtensionPlugin::initializeEngine(QQmlEngine *engine, const char *uri) */ QT_END_NAMESPACE + +#include "moc_qqmlextensionplugin.cpp" diff --git a/src/qml/qml/qqmlfileselector.cpp b/src/qml/qml/qqmlfileselector.cpp index 461ca33b3e..be6216d3ff 100644 --- a/src/qml/qml/qqmlfileselector.cpp +++ b/src/qml/qml/qqmlfileselector.cpp @@ -222,3 +222,5 @@ QUrl QQmlFileSelectorInterceptor::intercept(const QUrl &path, DataType type) } QT_END_NAMESPACE + +#include "moc_qqmlfileselector.cpp" diff --git a/src/qml/qml/qqmlglobal.cpp b/src/qml/qml/qqmlglobal.cpp index f967dacd34..7939656107 100644 --- a/src/qml/qml/qqmlglobal.cpp +++ b/src/qml/qml/qqmlglobal.cpp @@ -450,3 +450,5 @@ void QQmlApplication::setDomain(const QString &arg) } QT_END_NAMESPACE + +#include "moc_qqmlglobal_p.cpp" diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 712da78807..326b36c5cd 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -1090,3 +1090,5 @@ void QQmlLocale::method_localeCompare(const BuiltinFunction *b, Scope &scope, Ca */ QT_END_NAMESPACE + +#include "moc_qqmllocale_p.cpp" diff --git a/src/qml/qml/qqmlloggingcategory.cpp b/src/qml/qml/qqmlloggingcategory.cpp index 764b874131..08f8552ab6 100644 --- a/src/qml/qml/qqmlloggingcategory.cpp +++ b/src/qml/qml/qqmlloggingcategory.cpp @@ -126,3 +126,5 @@ void QQmlLoggingCategory::setName(const QString &name) QScopedPointer category(new QLoggingCategory(m_name.constData())); m_category.swap(category); } + +#include "moc_qqmlloggingcategory_p.cpp" diff --git a/src/qml/qml/qqmlplatform.cpp b/src/qml/qml/qqmlplatform.cpp index 64ca208f1b..165cde5eb3 100644 --- a/src/qml/qml/qqmlplatform.cpp +++ b/src/qml/qml/qqmlplatform.cpp @@ -79,3 +79,5 @@ QString QQmlPlatform::os() } QT_END_NAMESPACE + +#include "moc_qqmlplatform_p.cpp" diff --git a/src/qml/qml/qqmltypenotavailable.cpp b/src/qml/qml/qqmltypenotavailable.cpp index b10a7c62b9..ffa4472e4b 100644 --- a/src/qml/qml/qqmltypenotavailable.cpp +++ b/src/qml/qml/qqmltypenotavailable.cpp @@ -49,3 +49,5 @@ int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMi QQmlTypeNotAvailable::QQmlTypeNotAvailable() { } QT_END_NAMESPACE + +#include "moc_qqmltypenotavailable_p.cpp" diff --git a/src/qml/qml/qqmlvaluetype.cpp b/src/qml/qml/qqmlvaluetype.cpp index bcefad0ee3..520f512b1a 100644 --- a/src/qml/qml/qqmlvaluetype.cpp +++ b/src/qml/qml/qqmlvaluetype.cpp @@ -566,3 +566,5 @@ QVariantList QQmlEasingValueType::bezierCurve() const } QT_END_NAMESPACE + +#include "moc_qqmlvaluetype_p.cpp" -- cgit v1.2.3