Skip to content
Snippets Groups Projects
Commit db6b6087 authored by Tobias Hunger's avatar Tobias Hunger
Browse files

CMake: Make connections in server-mode setup more robust


Change-Id: I1e66b4decd485edac9e3fb5508d5c0bb10d0554a
Reviewed-by: default avatarTim Jenssen <tim.jenssen@qt.io>
parent f0bf6211
Branches
Tags
No related merge requests found
...@@ -145,11 +145,6 @@ void BuildDirManager::maybeForceReparseOnceReaderReady() ...@@ -145,11 +145,6 @@ void BuildDirManager::maybeForceReparseOnceReaderReady()
const QByteArrayList criticalKeys const QByteArrayList criticalKeys
= QByteArrayList() << GENERATOR_KEY << CMAKE_COMMAND_KEY; = QByteArrayList() << GENERATOR_KEY << CMAKE_COMMAND_KEY;
if (!m_reader->hasData()) {
forceReparse();
return;
}
const CMakeConfig currentConfig = parsedConfiguration(); const CMakeConfig currentConfig = parsedConfiguration();
Kit *k = m_buildConfiguration->target()->kit(); Kit *k = m_buildConfiguration->target()->kit();
...@@ -371,6 +366,11 @@ void BuildDirManager::checkConfiguration() ...@@ -371,6 +366,11 @@ void BuildDirManager::checkConfiguration()
void BuildDirManager::maybeForceReparse() void BuildDirManager::maybeForceReparse()
{ {
if (!m_reader || !m_reader->hasData()) {
forceReparse();
return;
}
updateReaderType([this]() { maybeForceReparseOnceReaderReady(); }); updateReaderType([this]() { maybeForceReparseOnceReaderReady(); });
} }
......
...@@ -128,7 +128,7 @@ ServerMode::~ServerMode() ...@@ -128,7 +128,7 @@ ServerMode::~ServerMode()
m_cmakeProcess->disconnect(); m_cmakeProcess->disconnect();
if (m_cmakeSocket) { if (m_cmakeSocket) {
m_cmakeSocket->disconnect(); m_cmakeSocket->disconnect();
m_cmakeSocket->disconnectFromServer(); m_cmakeSocket->abort();
delete(m_cmakeSocket); delete(m_cmakeSocket);
} }
m_cmakeSocket = nullptr; m_cmakeSocket = nullptr;
...@@ -184,16 +184,18 @@ void ServerMode::connectToServer() ...@@ -184,16 +184,18 @@ void ServerMode::connectToServer()
QTC_ASSERT(!m_cmakeSocket, return); QTC_ASSERT(!m_cmakeSocket, return);
auto socket = new QLocalSocket(m_cmakeProcess.get()); auto socket = new QLocalSocket(m_cmakeProcess.get());
connect(socket, &QLocalSocket::readyRead, connect(socket, &QLocalSocket::readyRead, this, &ServerMode::handleRawCMakeServerData);
this, &ServerMode::handleRawCMakeServerData);
connect(socket, static_cast<void(QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error), connect(socket, static_cast<void(QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error),
[this, socket]() { this, [this, socket]() {
reportError(socket->errorString()); reportError(socket->errorString());
m_cmakeSocket = nullptr;
socket->disconnect(); socket->disconnect();
socket->deleteLater(); socket->deleteLater();
}); });
connect(socket, &QLocalSocket::connected, [this, socket]() { m_cmakeSocket = socket; }); connect(socket, &QLocalSocket::connected, this, [this, socket]() { m_cmakeSocket = socket; });
connect(socket, &QLocalSocket::disconnected, [this, socket]() { connect(socket, &QLocalSocket::disconnected, this, [this, socket]() {
if (m_cmakeSocket)
emit disconnected();
m_cmakeSocket = nullptr; m_cmakeSocket = nullptr;
socket->disconnect(); socket->disconnect();
socket->deleteLater(); socket->deleteLater();
...@@ -352,6 +354,7 @@ void ServerMode::parseJson(const QVariantMap &data) ...@@ -352,6 +354,7 @@ void ServerMode::parseJson(const QVariantMap &data)
emit cmakeError(data.value("errorMessage").toString(), replyTo, cookie); emit cmakeError(data.value("errorMessage").toString(), replyTo, cookie);
if (replyTo == HANDSHAKE_TYPE) { if (replyTo == HANDSHAKE_TYPE) {
Core::Reaper::reap(m_cmakeProcess.release()); Core::Reaper::reap(m_cmakeProcess.release());
m_cmakeSocket->disconnect();
m_cmakeSocket->disconnectFromServer(); m_cmakeSocket->disconnectFromServer();
m_cmakeSocket = nullptr; m_cmakeSocket = nullptr;
emit disconnected(); emit disconnected();
......
...@@ -110,9 +110,9 @@ void ServerModeReader::setParameters(const BuildDirReader::Parameters &p) ...@@ -110,9 +110,9 @@ void ServerModeReader::setParameters(const BuildDirReader::Parameters &p)
connect(m_cmakeServer.get(), &ServerMode::message, connect(m_cmakeServer.get(), &ServerMode::message,
this, [](const QString &m) { Core::MessageManager::write(m); }); this, [](const QString &m) { Core::MessageManager::write(m); });
connect(m_cmakeServer.get(), &ServerMode::connected, connect(m_cmakeServer.get(), &ServerMode::connected,
this, &ServerModeReader::isReadyNow); this, &ServerModeReader::isReadyNow, Qt::QueuedConnection); // Delay
connect(m_cmakeServer.get(), &ServerMode::disconnected, connect(m_cmakeServer.get(), &ServerMode::disconnected,
this, [this]() { m_cmakeServer.reset(); }); this, [this]() { m_cmakeServer.reset(); }, Qt::QueuedConnection); // Delay
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment