summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libs/codemodelbackendipc/connectionclient.cpp23
-rw-r--r--src/libs/codemodelbackendipc/connectionclient.h2
2 files changed, 22 insertions, 3 deletions
diff --git a/src/libs/codemodelbackendipc/connectionclient.cpp b/src/libs/codemodelbackendipc/connectionclient.cpp
index 61c12e4629..de3b9b7649 100644
--- a/src/libs/codemodelbackendipc/connectionclient.cpp
+++ b/src/libs/codemodelbackendipc/connectionclient.cpp
@@ -53,11 +53,14 @@ QString connectionName()
}
ConnectionClient::ConnectionClient(IpcClientInterface *client)
- : serverProxy_(client, &localSocket)
+ : serverProxy_(client, &localSocket),
+ isAliveTimerResetted(false)
{
processAliveTimer.setInterval(10000);
- connect(&processAliveTimer, &QTimer::timeout, this, &ConnectionClient::restartProcess);
+ connect(&processAliveTimer, &QTimer::timeout,
+ this, &ConnectionClient::restartProcessIfTimerIsNotResettedAndSocketIsEmpty);
+
connect(&localSocket,
static_cast<void (QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error),
this,
@@ -112,6 +115,7 @@ void ConnectionClient::sendEndCommand()
void ConnectionClient::resetProcessAliveTimer()
{
+ isAliveTimerResetted = true;
processAliveTimer.start();
}
@@ -127,7 +131,7 @@ void ConnectionClient::startProcess()
connectStandardOutputAndError();
process()->start(processPath(), {connectionName()});
process()->waitForStarted();
- processAliveTimer.start();
+ resetProcessAliveTimer();
}
}
@@ -141,6 +145,19 @@ void ConnectionClient::restartProcess()
emit processRestarted();
}
+void ConnectionClient::restartProcessIfTimerIsNotResettedAndSocketIsEmpty()
+{
+ if (isAliveTimerResetted) {
+ isAliveTimerResetted = false;
+ return; // Already reset, but we were scheduled after.
+ }
+
+ if (localSocket.bytesAvailable() > 0)
+ return; // We come first, the incoming data was not yet processed.
+
+ restartProcess();
+}
+
bool ConnectionClient::connectToLocalSocket()
{
QThread::msleep(30);
diff --git a/src/libs/codemodelbackendipc/connectionclient.h b/src/libs/codemodelbackendipc/connectionclient.h
index 2e2cb2ef15..fb5d2b4f35 100644
--- a/src/libs/codemodelbackendipc/connectionclient.h
+++ b/src/libs/codemodelbackendipc/connectionclient.h
@@ -70,6 +70,7 @@ public:
void startProcess();
void restartProcess();
+ void restartProcessIfTimerIsNotResettedAndSocketIsEmpty();
void finishProcess();
bool isProcessIsRunning() const;
@@ -104,6 +105,7 @@ private:
IpcServerProxy serverProxy_;
QTimer processAliveTimer;
QString processPath_;
+ bool isAliveTimerResetted;
};
} // namespace CodeModelBackEnd