diff options
author | Simjees Abraham <simjees.abraham@nokia.com> | 2012-05-22 14:01:16 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-24 12:52:43 +0200 |
commit | b909ce4f50be282a65f04b1ef19469d5875868e1 (patch) | |
tree | 1523ad33640172fba515095d24fa09d693f05e0f /src/qml/debugger | |
parent | 1956ec4792f557a910e195e2276a124550337aeb (diff) |
Debugger: Removing the deleted objects from objectReferenceHash
The invalid entries from objectReferenceHash in QQmlDebugService
is removed once the Qml object is destroyed.
Task-number: QTCREATORBUG_7451
Change-Id: I8d2ccafe81a811ea319f13fd99fbde3c13e6b2be
Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
Diffstat (limited to 'src/qml/debugger')
-rw-r--r-- | src/qml/debugger/qqmldebugservice.cpp | 20 | ||||
-rw-r--r-- | src/qml/debugger/qqmldebugservice_p.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/qml/debugger/qqmldebugservice.cpp b/src/qml/debugger/qqmldebugservice.cpp index 57d5a714ff..511c8549a3 100644 --- a/src/qml/debugger/qqmldebugservice.cpp +++ b/src/qml/debugger/qqmldebugservice.cpp @@ -199,6 +199,8 @@ QObject *QQmlDebugService::objectForId(int id) if (objIter->object == 0) { hash->ids.erase(iter); hash->objects.erase(objIter); + // run a loop to remove other invalid objects + removeInvalidObjectsFromHash(); return 0; } else { return *iter; @@ -237,6 +239,24 @@ QList<QObject*> QQmlDebugService::objectForLocationInfo(const QString &filename, return objects; } +void QQmlDebugService::removeInvalidObjectsFromHash() +{ + ObjectReferenceHash *hash = objectReferenceHash(); + QHash<int, QObject *>::Iterator iter = hash->ids.begin(); + while (iter != hash->ids.end()) { + QHash<QObject *, ObjectReference>::Iterator objIter = + hash->objects.find(*iter); + Q_ASSERT(objIter != hash->objects.end()); + + if (objIter->object == 0) { + iter = hash->ids.erase(iter); + hash->objects.erase(objIter); + } else { + ++iter; + } + } +} + bool QQmlDebugService::isDebuggingEnabled() { return QQmlDebugServer::instance() != 0; diff --git a/src/qml/debugger/qqmldebugservice_p.h b/src/qml/debugger/qqmldebugservice_p.h index 6e99f93e03..4a0b52e429 100644 --- a/src/qml/debugger/qqmldebugservice_p.h +++ b/src/qml/debugger/qqmldebugservice_p.h @@ -87,6 +87,7 @@ public: static QObject *objectForId(int); static QList<QObject*> objectForLocationInfo(const QString &filename, int lineNumber, int columnNumber); + static void removeInvalidObjectsFromHash(); static QString objectToString(QObject *obj); |