From 14bd3aa88f1f3dddecb423abaeac5282762ee8e7 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 16 Sep 2015 17:56:39 +0200 Subject: 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 --- .../qmltooling/qmldbg_server/qqmldebugserver.cpp | 24 ++++++++-------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'src/plugins') 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 { -- cgit v1.2.3