aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/debugger
diff options
context:
space:
mode:
authorSimjees Abraham <simjees.abraham@nokia.com>2012-05-22 14:01:16 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-24 12:52:43 +0200
commitb909ce4f50be282a65f04b1ef19469d5875868e1 (patch)
tree1523ad33640172fba515095d24fa09d693f05e0f /src/qml/debugger
parent1956ec4792f557a910e195e2276a124550337aeb (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.cpp20
-rw-r--r--src/qml/debugger/qqmldebugservice_p.h1
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);