diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-09-16 17:56:39 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-09-21 13:01:16 +0000 |
commit | 14bd3aa88f1f3dddecb423abaeac5282762ee8e7 (patch) | |
tree | 715910b055bf4fad24a19c236230296d4c7b1a30 /src/plugins | |
parent | 53b0c5dd49cede94ab8c5cd8f2e023d1202b4862 (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.cpp | 24 |
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 { |