diff options
author | Alan Alpert <aalpert@rim.com> | 2013-01-24 14:07:29 -0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-07 19:41:28 +0200 |
commit | 9b5a55101d7c519446c1cf3706a235dea81ad4de (patch) | |
tree | 8f7201f04f8e593c8e00fd4d293d2d28e1a655ab /src/qml/qml/qqmlmetatype.cpp | |
parent | 223313479bf8ec80158ba0f6cba4dd5e74d92718 (diff) |
Add qmlClearRegisteredTypes Function
Registered types are stored in a global static variable, not on an
engine instance. For applications managing multiple engines over their
lifetime, there needs to be a way to clear the existing types so they
can register new ones and avoid memory leaks.
Task-Number: QTBUG-28572
Change-Id: Ic70a4dd1e29d99399b21fb42eaf10d4a52bf2adf
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Diffstat (limited to 'src/qml/qml/qqmlmetatype.cpp')
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index 0f3a27aeff..b29df4d252 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -46,6 +46,7 @@ #include <private/qqmlcustomparser_p.h> #include <private/qqmlguard_p.h> #include <private/qhashedstring_p.h> +#include <private/qqmlimport_p.h> #include <QtCore/qdebug.h> #include <QtCore/qstringlist.h> @@ -1068,6 +1069,29 @@ QQmlType *QQmlTypeModuleVersion::type(const QHashedV8String &name) const else return 0; } +void qmlClearTypeRegistrations() // Declared in qqml.h +{ + //Only cleans global static, assumed no running engine + QWriteLocker lock(metaTypeDataLock()); + QQmlMetaTypeData *data = metaTypeData(); + + for (int i = 0; i < data->types.count(); ++i) + delete data->types.at(i); + + QQmlMetaTypeData::TypeModules::const_iterator i = data->uriToModule.constBegin(); + for (; i != data->uriToModule.constEnd(); ++i) + delete *i; + + data->types.clear(); + data->idToType.clear(); + data->nameToType.clear(); + data->urlToType.clear(); + data->metaObjectToType.clear(); + data->uriToModule.clear(); + + QQmlEnginePrivate::baseModulesUninitialized = true; //So the engine re-registers its types + qmlClearEnginePlugins(); +} int registerAutoParentFunction(QQmlPrivate::RegisterAutoParent &autoparent) { |