From 68e8a56b3b6110e949943d1d7795a71069c84f12 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 9 Aug 2017 13:44:49 +0200 Subject: [PATCH] ProjectExplorer: Introduce an "essential" flag for RunWorker An essential RunWorker triggers the whole RunControl to stop if it spontaneously stops. Change-Id: Ia05b927e306022e99b45cc8cd7ab9636f4d3c129 Reviewed-by: hjk --- src/plugins/projectexplorer/runconfiguration.cpp | 15 +++++++++++++++ src/plugins/projectexplorer/runconfiguration.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 0359bbd72bc..8a08688fd40 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -547,6 +547,7 @@ public: int stopWatchdogInterval = 0; // 5000; int stopWatchdogTimerId = -1; bool supportsReRunning = true; + bool essential = false; }; enum class RunControlState @@ -954,6 +955,10 @@ void RunControlPrivate::onWorkerStopped(RunWorker *worker) if (state == RunControlState::Finishing || state == RunControlState::Stopping) { continueStopOrFinish(); return; + } else if (worker->isEssential()) { + debugMessage(workerId + " is essential. Stopping all others."); + initiateStop(); + return; } for (RunWorker *dependent : worker->d->stopDependencies) { @@ -1701,6 +1706,16 @@ QString RunWorker::userMessageForProcessError(QProcess::ProcessError error, cons return msg; } +bool RunWorker::isEssential() const +{ + return d->essential; +} + +void RunWorker::setEssential(bool essential) +{ + d->essential = essential; +} + void RunWorker::start() { reportStarted(); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 0eda5b396a4..80c1631d63e 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -353,6 +353,9 @@ public: static QString userMessageForProcessError(QProcess::ProcessError, const QString &programName); + bool isEssential() const; + void setEssential(bool essential); + signals: void started(); void stopped();