From 8e586dfa022232a82762503c896a0088429cd8c7 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 6 Apr 2022 12:54:14 +0200 Subject: [PATCH] AbstractProcessStep: Connect to QtcProcess::done() signal Instead of connecting to finished() signal. Change-Id: I2c1266bf699f54053fde37bb7ff22a93131e6b11 Reviewed-by: hjk Reviewed-by: --- .../projectexplorer/abstractprocessstep.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index a08fbe22d61..f1013efa1d7 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -208,7 +208,6 @@ void AbstractProcessStep::doRun() CommandLine::Raw); if (!effectiveCommand.executable().isExecutableFile()) { processStartupFailed(); - finish(false); return; } @@ -233,14 +232,12 @@ void AbstractProcessStep::doRun() this, &AbstractProcessStep::processReadyReadStdOutput); connect(d->m_process.get(), &QtcProcess::readyReadStandardError, this, &AbstractProcessStep::processReadyReadStdError); - connect(d->m_process.get(), &QtcProcess::finished, + connect(d->m_process.get(), &QtcProcess::done, this, &AbstractProcessStep::slotProcessFinished); d->m_process->start(); if (!d->m_process->waitForStarted()) { - processStartupFailed(); d->m_process.reset(); - finish(false); return; } processStarted(); @@ -281,15 +278,13 @@ void AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status) { - // The process has finished, leftover data is read in processFinished + // The process has finished, leftover data was read in slotProcessFinished q->processFinished(exitCode, status); - const bool returnValue = q->processSucceeded(exitCode, status) - || m_ignoreReturnValue; + const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue; if (m_process) m_process.release()->deleteLater(); - // Report result q->finish(returnValue); } @@ -316,7 +311,7 @@ void AbstractProcessStep::processStarted() void AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status) { - QString command = d->m_param.effectiveCommand().toUserOutput(); + const QString command = d->m_param.effectiveCommand().toUserOutput(); if (status == QProcess::NormalExit && exitCode == 0) { emit addOutput(tr("The process \"%1\" exited normally.").arg(command), BuildStep::OutputFormat::NormalMessage); @@ -345,6 +340,7 @@ void AbstractProcessStep::processStartupFailed() QString err = d->m_process ? d->m_process->errorString() : QString(); if (!err.isEmpty()) emit addOutput(err, OutputFormat::ErrorMessage); + finish(false); } /*! @@ -401,6 +397,10 @@ void AbstractProcessStep::finish(bool success) void AbstractProcessStep::slotProcessFinished() { QTC_ASSERT(d->m_process.get(), return); + if (d->m_process->error() == QProcess::FailedToStart) { + processStartupFailed(); + return; + } stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError())); stdOutput(d->stdoutStream->toUnicode(d->m_process->readAllStandardOutput())); d->cleanUp(d->m_process->exitCode(), d->m_process->exitStatus());