aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@theqtcompany.com>2015-09-16 17:56:39 +0200
committerUlf Hermann <ulf.hermann@theqtcompany.com>2015-09-21 13:01:16 +0000
commit14bd3aa88f1f3dddecb423abaeac5282762ee8e7 (patch)
tree715910b055bf4fad24a19c236230296d4c7b1a30 /src/plugins
parent53b0c5dd49cede94ab8c5cd8f2e023d1202b4862 (diff)
QmlDebug: Make sure debug server knows connection before any messages
In some cases the connection may relay a message to the server directly when calling one of the connect methods. This leads to a crash if the server, due to not knowing the connection yet, cannot reply. Change-Id: Iac2da08c621b70c2e5a1922efad0cd6ae4edc4e1 Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
index 93e1d0c030..69d36beaca 100644
--- a/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
+++ b/src/plugins/qmltooling/qmldbg_server/qqmldebugserver.cpp
@@ -217,27 +217,21 @@ void QQmlDebugServerThread::run()
Q_ASSERT_X(m_server != 0, Q_FUNC_INFO, "There should always be a debug server available here.");
QQmlDebugServerConnection *connection = loadQQmlDebugServerConnection(m_pluginName);
if (connection) {
- connection->setServer(m_server);
-
- if (m_fileName.isEmpty()) {
- if (!connection->setPortRange(m_portFrom, m_portTo, m_server->blockingMode(),
- m_hostAddress)) {
- delete connection;
- return;
- }
- } else {
- if (!connection->setFileName(m_fileName, m_server->blockingMode())) {
- delete connection;
- return;
- }
- }
-
{
QMutexLocker connectionLocker(&m_server->m_helloMutex);
m_server->m_connection = connection;
+ connection->setServer(m_server);
m_server->m_helloCondition.wakeAll();
}
+ if (m_fileName.isEmpty()) {
+ if (!connection->setPortRange(m_portFrom, m_portTo, m_server->blockingMode(),
+ m_hostAddress))
+ return;
+ } else if (!connection->setFileName(m_fileName, m_server->blockingMode())) {
+ return;
+ }
+
if (m_server->blockingMode())
connection->waitForConnection();
} else {