forked from qt-creator/qt-creator
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:
@@ -232,15 +232,12 @@ void AbstractProcessStep::doRun()
|
|||||||
this, &AbstractProcessStep::processReadyReadStdOutput);
|
this, &AbstractProcessStep::processReadyReadStdOutput);
|
||||||
connect(d->m_process.get(), &QtcProcess::readyReadStandardError,
|
connect(d->m_process.get(), &QtcProcess::readyReadStandardError,
|
||||||
this, &AbstractProcessStep::processReadyReadStdError);
|
this, &AbstractProcessStep::processReadyReadStdError);
|
||||||
|
connect(d->m_process.get(), &QtcProcess::started,
|
||||||
|
this, &AbstractProcessStep::processStarted);
|
||||||
connect(d->m_process.get(), &QtcProcess::done,
|
connect(d->m_process.get(), &QtcProcess::done,
|
||||||
this, &AbstractProcessStep::slotProcessFinished);
|
this, &AbstractProcessStep::handleProcessDone);
|
||||||
|
|
||||||
d->m_process->start();
|
d->m_process->start();
|
||||||
if (!d->m_process->waitForStarted()) {
|
|
||||||
d->m_process.reset();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
processStarted();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractProcessStep::setLowPriority()
|
void AbstractProcessStep::setLowPriority()
|
||||||
@@ -278,7 +275,7 @@ void AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons
|
|||||||
|
|
||||||
void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status)
|
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);
|
q->processFinished(exitCode, status);
|
||||||
const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue;
|
const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue;
|
||||||
|
|
||||||
@@ -394,11 +391,12 @@ void AbstractProcessStep::finish(bool success)
|
|||||||
emit finished(success);
|
emit finished(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractProcessStep::slotProcessFinished()
|
void AbstractProcessStep::handleProcessDone()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(d->m_process.get(), return);
|
QTC_ASSERT(d->m_process.get(), return);
|
||||||
if (d->m_process->error() == QProcess::FailedToStart) {
|
if (d->m_process->error() == QProcess::FailedToStart) {
|
||||||
processStartupFailed();
|
processStartupFailed();
|
||||||
|
d->m_process.release()->deleteLater();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError()));
|
stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError()));
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void processReadyReadStdOutput();
|
void processReadyReadStdOutput();
|
||||||
void processReadyReadStdError();
|
void processReadyReadStdError();
|
||||||
void slotProcessFinished();
|
void handleProcessDone();
|
||||||
|
|
||||||
class Private;
|
class Private;
|
||||||
Private *d;
|
Private *d;
|
||||||
|
|||||||
Reference in New Issue
Block a user