aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmldebug
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2017-09-07 15:17:15 +0200
committerUlf Hermann <ulf.hermann@qt.io>2017-09-07 13:28:52 +0000
commit1634987caefd36303c048a271ae67ca6b927a001 (patch)
treea7a0ad51991973f54d9cf3ff32f1d19f3ff625cb /src/libs/qmldebug
parent239ed56f4b719179278b1983e635f8ccc32f2eb9 (diff)
QmlDebug: Don't use QmlDebugConnection unconditionally
It might be null. We wrap the retrieval of the data stream version in QmlDebugClient and return the minimum if connection is null. The extra copy of the connection QmlEngine is dropped as QmlDebugClient already has one and we don't want to hit a dangling pointer. Change-Id: Ida8c45d357d46b4942eea99b77065d3c51c7edb9 Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/libs/qmldebug')
-rw-r--r--src/libs/qmldebug/baseenginedebugclient.cpp28
-rw-r--r--src/libs/qmldebug/declarativeenginedebugclient.cpp8
-rw-r--r--src/libs/qmldebug/qmldebugclient.cpp9
-rw-r--r--src/libs/qmldebug/qmldebugclient.h1
-rw-r--r--src/libs/qmldebug/qmltoolsclient.cpp8
5 files changed, 31 insertions, 23 deletions
diff --git a/src/libs/qmldebug/baseenginedebugclient.cpp b/src/libs/qmldebug/baseenginedebugclient.cpp
index f3e5271e32..df014e43a0 100644
--- a/src/libs/qmldebug/baseenginedebugclient.cpp
+++ b/src/libs/qmldebug/baseenginedebugclient.cpp
@@ -178,7 +178,7 @@ void BaseEngineDebugClient::stateChanged(State state)
void BaseEngineDebugClient::messageReceived(const QByteArray &data)
{
- QPacket ds(connection()->currentDataStreamVersion(), data);
+ QPacket ds(dataStreamVersion(), data);
int queryId;
QByteArray type;
ds >> type >> queryId;
@@ -251,7 +251,7 @@ quint32 BaseEngineDebugClient::addWatch(const PropertyReference &property)
quint32 id = 0;
if (state() == Enabled) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("WATCH_PROPERTY") << id << property.m_objectDebugId
<< property.m_name.toUtf8();
sendMessage(ds.data());
@@ -272,7 +272,7 @@ quint32 BaseEngineDebugClient::addWatch(const ObjectReference &object,
quint32 id = 0;
if (state() == Enabled) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("WATCH_EXPR_OBJECT") << id << object.m_debugId << expr;
sendMessage(ds.data());
}
@@ -284,7 +284,7 @@ quint32 BaseEngineDebugClient::addWatch(int objectDebugId)
quint32 id = 0;
if (state() == Enabled) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("WATCH_OBJECT") << id << objectDebugId;
sendMessage(ds.data());
}
@@ -300,7 +300,7 @@ quint32 BaseEngineDebugClient::addWatch(const FileReference &/*file*/)
void BaseEngineDebugClient::removeWatch(quint32 id)
{
if (state() == Enabled) {
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("NO_WATCH") << id;
sendMessage(ds.data());
}
@@ -311,7 +311,7 @@ quint32 BaseEngineDebugClient::queryAvailableEngines()
quint32 id = 0;
if (state() == Enabled) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("LIST_ENGINES") << id;
sendMessage(ds.data());
}
@@ -323,7 +323,7 @@ quint32 BaseEngineDebugClient::queryRootContexts(const EngineReference &engine)
quint32 id = 0;
if (state() == Enabled && engine.m_debugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("LIST_OBJECTS") << id << engine.m_debugId;
sendMessage(ds.data());
}
@@ -335,7 +335,7 @@ quint32 BaseEngineDebugClient::queryObject(int objectId)
quint32 id = 0;
if (state() == Enabled && objectId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("FETCH_OBJECT") << id << objectId << false <<
true;
sendMessage(ds.data());
@@ -348,7 +348,7 @@ quint32 BaseEngineDebugClient::queryObjectRecursive(int objectId)
quint32 id = 0;
if (state() == Enabled && objectId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("FETCH_OBJECT") << id << objectId << true <<
true;
sendMessage(ds.data());
@@ -363,7 +363,7 @@ quint32 BaseEngineDebugClient::queryExpressionResult(int objectDebugId,
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("EVAL_EXPRESSION") << id << objectDebugId << expr
<< engineId;
sendMessage(ds.data());
@@ -381,7 +381,7 @@ quint32 BaseEngineDebugClient::setBindingForObject(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
<< bindingExpression << isLiteralValue << source << line;
sendMessage(ds.data());
@@ -396,7 +396,7 @@ quint32 BaseEngineDebugClient::resetBindingForObject(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
sendMessage(ds.data());
}
@@ -410,7 +410,7 @@ quint32 BaseEngineDebugClient::setMethodBody(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
<< methodName << methodBody;
sendMessage(ds.data());
@@ -424,7 +424,7 @@ quint32 BaseEngineDebugClient::queryObjectsForLocation(
quint32 id = 0;
if (state() == Enabled) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("FETCH_OBJECTS_FOR_LOCATION") << id <<
fileName << lineNumber << columnNumber << false <<
true;
diff --git a/src/libs/qmldebug/declarativeenginedebugclient.cpp b/src/libs/qmldebug/declarativeenginedebugclient.cpp
index e014aa44fa..21a13a960d 100644
--- a/src/libs/qmldebug/declarativeenginedebugclient.cpp
+++ b/src/libs/qmldebug/declarativeenginedebugclient.cpp
@@ -46,7 +46,7 @@ quint32 DeclarativeEngineDebugClient::setBindingForObject(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
<< bindingExpression << isLiteralValue << source << line;
sendMessage(ds.data());
@@ -61,7 +61,7 @@ quint32 DeclarativeEngineDebugClient::resetBindingForObject(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
sendMessage(ds.data());
}
@@ -75,7 +75,7 @@ quint32 DeclarativeEngineDebugClient::setMethodBody(
quint32 id = 0;
if (state() == Enabled && objectDebugId != -1) {
id = getId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray("SET_METHOD_BODY") << objectDebugId
<< methodName << methodBody;
sendMessage(ds.data());
@@ -85,7 +85,7 @@ quint32 DeclarativeEngineDebugClient::setMethodBody(
void DeclarativeEngineDebugClient::messageReceived(const QByteArray &data)
{
- QPacket ds(connection()->currentDataStreamVersion(), data);
+ QPacket ds(dataStreamVersion(), data);
QByteArray type;
ds >> type;
diff --git a/src/libs/qmldebug/qmldebugclient.cpp b/src/libs/qmldebug/qmldebugclient.cpp
index 5935fee5d2..1b27ee2a12 100644
--- a/src/libs/qmldebug/qmldebugclient.cpp
+++ b/src/libs/qmldebug/qmldebugclient.cpp
@@ -38,6 +38,7 @@
namespace QmlDebug {
const int protocolVersion = 1;
+const int minimumDataStreamVersion = QDataStream::Qt_4_7;
const QString serverId = QLatin1String("QDeclarativeDebugServer");
const QString clientId = QLatin1String("QDeclarativeDebugClient");
@@ -86,7 +87,7 @@ static QString socketErrorToString(QAbstractSocket::SocketError error)
QmlDebugConnectionPrivate::QmlDebugConnectionPrivate() :
protocol(0), server(0), device(0), gotHello(false),
- currentDataStreamVersion(QDataStream::Qt_4_7),
+ currentDataStreamVersion(minimumDataStreamVersion),
maximumDataStreamVersion(QDataStream::Qt_DefaultCompiledVersion)
{
}
@@ -493,6 +494,12 @@ QmlDebugConnection *QmlDebugClient::connection() const
return d->connection;
}
+int QmlDebugClient::dataStreamVersion() const
+{
+ Q_D(const QmlDebugClient);
+ return (d->connection ? d->connection->currentDataStreamVersion() : minimumDataStreamVersion);
+}
+
void QmlDebugClient::sendMessage(const QByteArray &message)
{
Q_D(QmlDebugClient);
diff --git a/src/libs/qmldebug/qmldebugclient.h b/src/libs/qmldebug/qmldebugclient.h
index 8d2f571275..b39ec5f3db 100644
--- a/src/libs/qmldebug/qmldebugclient.h
+++ b/src/libs/qmldebug/qmldebugclient.h
@@ -95,6 +95,7 @@ public:
float serviceVersion() const;
State state() const;
QmlDebugConnection *connection() const;
+ int dataStreamVersion() const;
virtual void sendMessage(const QByteArray &);
virtual void stateChanged(State);
diff --git a/src/libs/qmldebug/qmltoolsclient.cpp b/src/libs/qmldebug/qmltoolsclient.cpp
index 7ce05ef71a..e882f0733b 100644
--- a/src/libs/qmldebug/qmltoolsclient.cpp
+++ b/src/libs/qmldebug/qmltoolsclient.cpp
@@ -55,7 +55,7 @@ QmlToolsClient::QmlToolsClient(QmlDebugConnection *client)
void QmlToolsClient::messageReceived(const QByteArray &message)
{
- QPacket ds(connection()->currentDataStreamVersion(), message);
+ QPacket ds(dataStreamVersion(), message);
QByteArray type;
int requestId;
@@ -98,7 +98,7 @@ void QmlToolsClient::setObjectIdList(const QList<ObjectReference> &objectRoots)
foreach (const ObjectReference &object, objectRoots)
debugIds << object.debugId();
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray(REQUEST) << m_requestId++ << QByteArray(SELECT) << debugIds;
sendMessage(ds.data());
}
@@ -108,7 +108,7 @@ void QmlToolsClient::setDesignModeBehavior(bool inDesignMode)
if (!m_connection || !m_connection->isConnected())
return;
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray(REQUEST) << m_requestId++;
if (inDesignMode)
ds << QByteArray(ENABLE);
@@ -140,7 +140,7 @@ void QmlToolsClient::showAppOnTop(bool showOnTop)
if (!m_connection || !m_connection->isConnected())
return;
- QPacket ds(connection()->currentDataStreamVersion());
+ QPacket ds(dataStreamVersion());
ds << QByteArray(REQUEST) << m_requestId++
<< QByteArray(SHOW_APP_ON_TOP) << showOnTop;