From 028018dcacb69167b857b4f86d0384180ef7b05a Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 21 Oct 2016 10:22:38 +0200 Subject: [PATCH] Clang: Clear left-over preambles after crash ...otherwise they accumulate in the temporary directory. Change-Id: I0841f3d168f30f559fc718d2825dd3e800515074 Reviewed-by: Tim Jenssen Reviewed-by: Christian Kandeler --- src/libs/clangbackendipc/connectionclient.cpp | 12 +++++++++--- src/libs/clangbackendipc/connectionclient.h | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/libs/clangbackendipc/connectionclient.cpp b/src/libs/clangbackendipc/connectionclient.cpp index d0ba95bc580..0ccd742fb6c 100644 --- a/src/libs/clangbackendipc/connectionclient.cpp +++ b/src/libs/clangbackendipc/connectionclient.cpp @@ -43,6 +43,7 @@ namespace ClangBackEnd { ConnectionClient::ConnectionClient() { processAliveTimer.setInterval(10000); + resetTemporaryDir(); static const bool startAliveTimer = !qEnvironmentVariableIntValue("QTC_CLANG_NO_ALIVE_TIMER"); @@ -113,9 +114,7 @@ QProcessEnvironment ConnectionClient::processEnvironment() const const QTemporaryDir &ConnectionClient::temporaryDirectory() const { - static QTemporaryDir temporaryDirectory(QDir::tempPath() + QStringLiteral("/qtc-clang-XXXXXX")); - - return temporaryDirectory; + return *temporaryDirectory_.data(); } LinePrefixer &ConnectionClient::stdErrPrefixer() @@ -147,6 +146,7 @@ void ConnectionClient::restartProcessAsynchronously() { if (!processIsStarting) { finishProcess(std::move(process_)); + resetTemporaryDir(); // clear left-over preambles startProcessAndConnectToServerAsynchronously(); } @@ -218,6 +218,12 @@ void ConnectionClient::printStandardError() qDebug("%s", stdErrPrefixer_.prefix(process_->readAllStandardError()).constData()); } +void ConnectionClient::resetTemporaryDir() +{ + const QString templatePath = QDir::tempPath() + QStringLiteral("/qtc-clang-XXXXXX"); + temporaryDirectory_.reset(new QTemporaryDir(templatePath)); +} + void ConnectionClient::connectLocalSocketConnected() { connect(&localSocket, diff --git a/src/libs/clangbackendipc/connectionclient.h b/src/libs/clangbackendipc/connectionclient.h index b3eed0703b5..74ea4cf3298 100644 --- a/src/libs/clangbackendipc/connectionclient.h +++ b/src/libs/clangbackendipc/connectionclient.h @@ -30,6 +30,8 @@ #include #include +#include +#include #include @@ -102,6 +104,8 @@ private: void printStandardOutput(); void printStandardError(); + void resetTemporaryDir(); + void connectLocalSocketConnected(); void connectLocalSocketDisconnected(); void connectProcessFinished(QProcess *process) const; @@ -121,6 +125,7 @@ private: mutable std::unique_ptr process_; QLocalSocket localSocket; + QScopedPointer temporaryDirectory_; QTimer processAliveTimer; QString processPath_; bool isAliveTimerResetted = false;