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 <hjk@qt.io>
This commit is contained in:
Ulf Hermann
2017-08-09 13:44:49 +02:00
parent 6f5c5a56db
commit 68e8a56b3b
2 changed files with 18 additions and 0 deletions

View File

@@ -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();