AbstractProcessStep: Don't call blocking waitForStarted()

Connect to started() signal instead. Delete the process
later when process failed to start.

Change-Id: I9901a52c90b018af06348892e2bd97cf967418af
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-06-29 17:16:19 +02:00
parent 369ec34d05
commit bdf79d41b2
2 changed files with 7 additions and 9 deletions

View File

@@ -232,15 +232,12 @@ void AbstractProcessStep::doRun()
this, &AbstractProcessStep::processReadyReadStdOutput);
connect(d->m_process.get(), &QtcProcess::readyReadStandardError,
this, &AbstractProcessStep::processReadyReadStdError);
connect(d->m_process.get(), &QtcProcess::started,
this, &AbstractProcessStep::processStarted);
connect(d->m_process.get(), &QtcProcess::done,
this, &AbstractProcessStep::slotProcessFinished);
this, &AbstractProcessStep::handleProcessDone);
d->m_process->start();
if (!d->m_process->waitForStarted()) {
d->m_process.reset();
return;
}
processStarted();
}
void AbstractProcessStep::setLowPriority()
@@ -278,7 +275,7 @@ void AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons
void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status)
{
// The process has finished, leftover data was read in slotProcessFinished
// The process has finished, leftover data was read in handleProcessDone
q->processFinished(exitCode, status);
const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue;
@@ -394,11 +391,12 @@ void AbstractProcessStep::finish(bool success)
emit finished(success);
}
void AbstractProcessStep::slotProcessFinished()
void AbstractProcessStep::handleProcessDone()
{
QTC_ASSERT(d->m_process.get(), return);
if (d->m_process->error() == QProcess::FailedToStart) {
processStartupFailed();
d->m_process.release()->deleteLater();
return;
}
stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError()));

View File

@@ -76,7 +76,7 @@ protected:
private:
void processReadyReadStdOutput();
void processReadyReadStdError();
void slotProcessFinished();
void handleProcessDone();
class Private;
Private *d;