diff options
author | Alan Alpert <aalpert@blackberry.com> | 2013-07-30 15:27:31 -0700 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-31 08:37:02 +0200 |
commit | 2e4993fe61a2cbd01549c953701a9ac551c3d992 (patch) | |
tree | cf0f22088a0d2c939dcdb3b15ab627520c6a92f4 /src/qml | |
parent | 563d76066271477de0812213d475d3b769d9cfa1 (diff) |
Clean up objects in QQmlApplicationEngine earlier
Deleting the objects in the private class destructor leads to
crashes in V8 because the JS engine is in the middle of being
deleted. Instead, delete the objects in the public class
destructor so that it occurs before the actual engine cleanup
starts to happen.
Change-Id: I6bac813ce188be54842a78d7b532fcf2d54dc444
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/qml/qqmlapplicationengine.cpp | 7 | ||||
-rw-r--r-- | src/qml/qml/qqmlapplicationengine_p.h | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlapplicationengine.cpp b/src/qml/qml/qqmlapplicationengine.cpp index 9181dad519..85aeaf5786 100644 --- a/src/qml/qml/qqmlapplicationengine.cpp +++ b/src/qml/qml/qqmlapplicationengine.cpp @@ -54,6 +54,10 @@ QQmlApplicationEnginePrivate::QQmlApplicationEnginePrivate(QQmlEngine *e) QQmlApplicationEnginePrivate::~QQmlApplicationEnginePrivate() { +} + +void QQmlApplicationEnginePrivate::cleanUp() +{ qDeleteAll(objects); #ifndef QT_NO_TRANSLATIONS qDeleteAll(translators); @@ -229,7 +233,8 @@ QQmlApplicationEngine::QQmlApplicationEngine(const QString &filePath, QObject *p */ QQmlApplicationEngine::~QQmlApplicationEngine() { - //Instantiated root objects cleaned up in private class + Q_D(QQmlApplicationEngine); + d->cleanUp();//Instantiated root objects must be deleted before the engine } /*! diff --git a/src/qml/qml/qqmlapplicationengine_p.h b/src/qml/qml/qqmlapplicationengine_p.h index db144af504..cc38c62c02 100644 --- a/src/qml/qml/qqmlapplicationengine_p.h +++ b/src/qml/qml/qqmlapplicationengine_p.h @@ -70,6 +70,7 @@ public: QQmlApplicationEnginePrivate(QQmlEngine *e); ~QQmlApplicationEnginePrivate(); void init(); + void cleanUp(); void startLoad(const QUrl &url, const QByteArray &data = QByteArray(), bool dataFlag = false); void loadTranslations(const QUrl &rootFile); |