forked from qt-creator/qt-creator
Use QProcess' / process lanuncher's exit code
Change-Id: I802116c45847daf9a647771ee293aef8463fc3c7 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -218,6 +218,8 @@ void CallerHandle::handleError(const ErrorSignal *launcherSignal)
|
||||
m_processState = QProcess::NotRunning;
|
||||
m_error = launcherSignal->error();
|
||||
m_errorString = launcherSignal->errorString();
|
||||
if (m_error == QProcess::FailedToStart)
|
||||
m_exitCode = 255; // This code is being returned by QProcess when FailedToStart error occurred
|
||||
emit errorOccurred(m_error);
|
||||
}
|
||||
|
||||
@@ -328,6 +330,12 @@ qint64 CallerHandle::processId() const
|
||||
return m_processId;
|
||||
}
|
||||
|
||||
int CallerHandle::exitCode() const
|
||||
{
|
||||
QTC_ASSERT(isCalledFromCallersThread(), return -1);
|
||||
return m_exitCode;
|
||||
}
|
||||
|
||||
QString CallerHandle::errorString() const
|
||||
{
|
||||
QTC_ASSERT(isCalledFromCallersThread(), return {});
|
||||
|
@@ -92,6 +92,7 @@ public:
|
||||
QByteArray readAllStandardError();
|
||||
|
||||
qint64 processId() const;
|
||||
int exitCode() const;
|
||||
QString errorString() const;
|
||||
void setErrorString(const QString &str);
|
||||
|
||||
|
@@ -237,6 +237,7 @@ public:
|
||||
virtual QProcess::ProcessError error() const = 0;
|
||||
virtual QProcess::ProcessState state() const = 0;
|
||||
virtual qint64 processId() const = 0;
|
||||
virtual int exitCode() const = 0;
|
||||
virtual QProcess::ExitStatus exitStatus() const = 0;
|
||||
virtual QString errorString() const = 0;
|
||||
virtual void setErrorString(const QString &str) = 0;
|
||||
@@ -332,6 +333,8 @@ public:
|
||||
{ return m_process.state(); }
|
||||
qint64 processId() const override
|
||||
{ return m_process.processId(); }
|
||||
int exitCode() const override
|
||||
{ return m_process.exitCode(); }
|
||||
QProcess::ExitStatus exitStatus() const override
|
||||
{ return m_process.exitStatus(); }
|
||||
QString errorString() const override
|
||||
@@ -416,6 +419,7 @@ public:
|
||||
QProcess::ProcessError error() const override { return m_handle->error(); }
|
||||
QProcess::ProcessState state() const override { return m_handle->state(); }
|
||||
qint64 processId() const override { return m_handle->processId(); }
|
||||
int exitCode() const override { return m_handle->exitCode(); }
|
||||
QProcess::ExitStatus exitStatus() const override { return m_handle->exitStatus(); }
|
||||
QString errorString() const override { return m_handle->errorString(); }
|
||||
void setErrorString(const QString &str) override { m_handle->setErrorString(str); }
|
||||
@@ -537,7 +541,6 @@ public:
|
||||
QEventLoop m_eventLoop;
|
||||
QtcProcess::Result m_result = QtcProcess::StartFailed;
|
||||
QProcess::ExitStatus m_exitStatus = QProcess::NormalExit;
|
||||
int m_exitCode = -1;
|
||||
ChannelBuffer m_stdOut;
|
||||
ChannelBuffer m_stdErr;
|
||||
ExitCodeInterpreter m_exitCodeInterpreter;
|
||||
@@ -558,7 +561,6 @@ void QtcProcessPrivate::clearForRun()
|
||||
m_stdErr.clearForRun();
|
||||
m_stdErr.codec = m_codec;
|
||||
m_result = QtcProcess::StartFailed;
|
||||
m_exitCode = -1;
|
||||
m_startFailure = false;
|
||||
}
|
||||
|
||||
@@ -917,7 +919,9 @@ void QtcProcess::setResult(Result result)
|
||||
|
||||
int QtcProcess::exitCode() const
|
||||
{
|
||||
return d->m_exitCode;
|
||||
if (d->m_startFailure)
|
||||
return 255; // This code is being returned by QProcess when FailedToStart error occurred
|
||||
return d->m_process->exitCode();
|
||||
}
|
||||
|
||||
|
||||
@@ -1455,13 +1459,11 @@ void QtcProcessPrivate::slotFinished(int exitCode, QProcess::ExitStatus status)
|
||||
switch (status) {
|
||||
case QProcess::NormalExit:
|
||||
m_result = interpretExitCode(exitCode);
|
||||
m_exitCode = exitCode;
|
||||
break;
|
||||
case QProcess::CrashExit:
|
||||
// Was hang detected before and killed?
|
||||
if (m_result != QtcProcess::Hang)
|
||||
m_result = QtcProcess::TerminatedAbnormally;
|
||||
m_exitCode = -1;
|
||||
break;
|
||||
}
|
||||
m_eventLoop.quit();
|
||||
|
@@ -1061,6 +1061,8 @@ void tst_QtcProcess::notRunningAfterStartingNonExistingProgram()
|
||||
QVERIFY(!process.waitForStarted(maxWaitTimeMs));
|
||||
QVERIFY(timer.elapsed() < maxWaitTimeMs); // shouldn't wait, should finish immediately
|
||||
QCOMPARE(process.state(), QProcess::NotRunning);
|
||||
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
|
||||
QCOMPARE(process.error(), QProcess::FailedToStart);
|
||||
QVERIFY(process.exitCode() != 0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user