diff options
author | Bea Lam <bea.lam@nokia.com> | 2009-11-08 22:55:59 (GMT) |
---|---|---|
committer | Bea Lam <bea.lam@nokia.com> | 2009-11-08 22:55:59 (GMT) |
commit | 2fb5889ea55209528fd19b7a34faac7c5be2b1b4 (patch) | |
tree | 9d17ae663848ccb5bb64c51b2e9ef8d50aea82d1 /src/declarative/debugger | |
parent | c4bc9a635bf0fd42e80e570909e204ae24b303b2 (diff) | |
download | Qt-2fb5889ea55209528fd19b7a34faac7c5be2b1b4.zip Qt-2fb5889ea55209528fd19b7a34faac7c5be2b1b4.tar.gz Qt-2fb5889ea55209528fd19b7a34faac7c5be2b1b4.tar.bz2 |
Fix crash when watch is deleted before calling removeWatch().
Diffstat (limited to 'src/declarative/debugger')
-rw-r--r-- | src/declarative/debugger/qmldebug.cpp | 12 | ||||
-rw-r--r-- | src/declarative/debugger/qmldebug_p.h | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/declarative/debugger/qmldebug.cpp b/src/declarative/debugger/qmldebug.cpp index b06a250..1403ffa 100644 --- a/src/declarative/debugger/qmldebug.cpp +++ b/src/declarative/debugger/qmldebug.cpp @@ -69,6 +69,7 @@ public: void decode(QDataStream &, QmlDebugContextReference &); void decode(QDataStream &, QmlDebugObjectReference &, bool simple); + static void remove(QmlEngineDebug *, QmlDebugEnginesQuery *); static void remove(QmlEngineDebug *, QmlDebugRootContextQuery *); static void remove(QmlEngineDebug *, QmlDebugObjectQuery *); @@ -133,6 +134,7 @@ void QmlEngineDebugPrivate::remove(QmlEngineDebug *c, QmlDebugExpressionQuery *q p->expressionQuery.remove(q->m_queryId); } + Q_DECLARE_METATYPE(QmlDebugObjectReference); void QmlEngineDebugPrivate::decode(QDataStream &ds, QmlDebugObjectReference &o, bool simple) @@ -345,6 +347,7 @@ QmlDebugPropertyWatch *QmlEngineDebug::addWatch(const QmlDebugPropertyReference if (d->client->isConnected()) { int queryId = d->getId(); watch->m_queryId = queryId; + watch->m_client = this; watch->m_objectDebugId = property.objectDebugId(); watch->m_name = property.name(); d->watched.insert(queryId, watch); @@ -373,6 +376,7 @@ QmlDebugObjectExpressionWatch *QmlEngineDebug::addWatch(const QmlDebugObjectRefe if (d->client->isConnected()) { int queryId = d->getId(); watch->m_queryId = queryId; + watch->m_client = this; watch->m_objectDebugId = object.debugId(); watch->m_expr = expr; d->watched.insert(queryId, watch); @@ -395,6 +399,7 @@ QmlDebugWatch *QmlEngineDebug::addWatch(const QmlDebugObjectReference &object, Q if (d->client->isConnected()) { int queryId = d->getId(); watch->m_queryId = queryId; + watch->m_client = this; watch->m_objectDebugId = object.debugId(); d->watched.insert(queryId, watch); @@ -544,8 +549,13 @@ QmlDebugExpressionQuery *QmlEngineDebug::queryExpressionResult(int objectDebugId } QmlDebugWatch::QmlDebugWatch(QObject *parent) -: QObject(parent), m_state(Waiting), m_queryId(-1), m_objectDebugId(-1) +: QObject(parent), m_state(Waiting), m_queryId(-1), m_client(0), m_objectDebugId(-1) +{ +} + +QmlDebugWatch::~QmlDebugWatch() { + m_client->removeWatch(this); } int QmlDebugWatch::queryId() const diff --git a/src/declarative/debugger/qmldebug_p.h b/src/declarative/debugger/qmldebug_p.h index d7e4f5a..4bc54e8 100644 --- a/src/declarative/debugger/qmldebug_p.h +++ b/src/declarative/debugger/qmldebug_p.h @@ -106,6 +106,7 @@ public: enum State { Waiting, Active, Inactive, Dead }; QmlDebugWatch(QObject *); + ~QmlDebugWatch(); int queryId() const; int objectDebugId() const; @@ -125,6 +126,7 @@ private: void setState(State); State m_state; int m_queryId; + QmlEngineDebug *m_client; int m_objectDebugId; }; |