Use QProcess' / process lanuncher's exit code

Change-Id: I802116c45847daf9a647771ee293aef8463fc3c7
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Jarek Kobus
2021-09-02 16:38:40 +02:00
parent 597750507e
commit a454b3dc23
4 changed files with 18 additions and 5 deletions

View File

@@ -218,6 +218,8 @@ void CallerHandle::handleError(const ErrorSignal *launcherSignal)
m_processState = QProcess::NotRunning; m_processState = QProcess::NotRunning;
m_error = launcherSignal->error(); m_error = launcherSignal->error();
m_errorString = launcherSignal->errorString(); 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); emit errorOccurred(m_error);
} }
@@ -328,6 +330,12 @@ qint64 CallerHandle::processId() const
return m_processId; return m_processId;
} }
int CallerHandle::exitCode() const
{
QTC_ASSERT(isCalledFromCallersThread(), return -1);
return m_exitCode;
}
QString CallerHandle::errorString() const QString CallerHandle::errorString() const
{ {
QTC_ASSERT(isCalledFromCallersThread(), return {}); QTC_ASSERT(isCalledFromCallersThread(), return {});

View File

@@ -92,6 +92,7 @@ public:
QByteArray readAllStandardError(); QByteArray readAllStandardError();
qint64 processId() const; qint64 processId() const;
int exitCode() const;
QString errorString() const; QString errorString() const;
void setErrorString(const QString &str); void setErrorString(const QString &str);

View File

@@ -237,6 +237,7 @@ public:
virtual QProcess::ProcessError error() const = 0; virtual QProcess::ProcessError error() const = 0;
virtual QProcess::ProcessState state() const = 0; virtual QProcess::ProcessState state() const = 0;
virtual qint64 processId() const = 0; virtual qint64 processId() const = 0;
virtual int exitCode() const = 0;
virtual QProcess::ExitStatus exitStatus() const = 0; virtual QProcess::ExitStatus exitStatus() const = 0;
virtual QString errorString() const = 0; virtual QString errorString() const = 0;
virtual void setErrorString(const QString &str) = 0; virtual void setErrorString(const QString &str) = 0;
@@ -332,6 +333,8 @@ public:
{ return m_process.state(); } { return m_process.state(); }
qint64 processId() const override qint64 processId() const override
{ return m_process.processId(); } { return m_process.processId(); }
int exitCode() const override
{ return m_process.exitCode(); }
QProcess::ExitStatus exitStatus() const override QProcess::ExitStatus exitStatus() const override
{ return m_process.exitStatus(); } { return m_process.exitStatus(); }
QString errorString() const override QString errorString() const override
@@ -416,6 +419,7 @@ public:
QProcess::ProcessError error() const override { return m_handle->error(); } QProcess::ProcessError error() const override { return m_handle->error(); }
QProcess::ProcessState state() const override { return m_handle->state(); } QProcess::ProcessState state() const override { return m_handle->state(); }
qint64 processId() const override { return m_handle->processId(); } 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(); } QProcess::ExitStatus exitStatus() const override { return m_handle->exitStatus(); }
QString errorString() const override { return m_handle->errorString(); } QString errorString() const override { return m_handle->errorString(); }
void setErrorString(const QString &str) override { m_handle->setErrorString(str); } void setErrorString(const QString &str) override { m_handle->setErrorString(str); }
@@ -537,7 +541,6 @@ public:
QEventLoop m_eventLoop; QEventLoop m_eventLoop;
QtcProcess::Result m_result = QtcProcess::StartFailed; QtcProcess::Result m_result = QtcProcess::StartFailed;
QProcess::ExitStatus m_exitStatus = QProcess::NormalExit; QProcess::ExitStatus m_exitStatus = QProcess::NormalExit;
int m_exitCode = -1;
ChannelBuffer m_stdOut; ChannelBuffer m_stdOut;
ChannelBuffer m_stdErr; ChannelBuffer m_stdErr;
ExitCodeInterpreter m_exitCodeInterpreter; ExitCodeInterpreter m_exitCodeInterpreter;
@@ -558,7 +561,6 @@ void QtcProcessPrivate::clearForRun()
m_stdErr.clearForRun(); m_stdErr.clearForRun();
m_stdErr.codec = m_codec; m_stdErr.codec = m_codec;
m_result = QtcProcess::StartFailed; m_result = QtcProcess::StartFailed;
m_exitCode = -1;
m_startFailure = false; m_startFailure = false;
} }
@@ -917,7 +919,9 @@ void QtcProcess::setResult(Result result)
int QtcProcess::exitCode() const 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) { switch (status) {
case QProcess::NormalExit: case QProcess::NormalExit:
m_result = interpretExitCode(exitCode); m_result = interpretExitCode(exitCode);
m_exitCode = exitCode;
break; break;
case QProcess::CrashExit: case QProcess::CrashExit:
// Was hang detected before and killed? // Was hang detected before and killed?
if (m_result != QtcProcess::Hang) if (m_result != QtcProcess::Hang)
m_result = QtcProcess::TerminatedAbnormally; m_result = QtcProcess::TerminatedAbnormally;
m_exitCode = -1;
break; break;
} }
m_eventLoop.quit(); m_eventLoop.quit();

View File

@@ -1061,6 +1061,8 @@ void tst_QtcProcess::notRunningAfterStartingNonExistingProgram()
QVERIFY(!process.waitForStarted(maxWaitTimeMs)); QVERIFY(!process.waitForStarted(maxWaitTimeMs));
QVERIFY(timer.elapsed() < maxWaitTimeMs); // shouldn't wait, should finish immediately QVERIFY(timer.elapsed() < maxWaitTimeMs); // shouldn't wait, should finish immediately
QCOMPARE(process.state(), QProcess::NotRunning); QCOMPARE(process.state(), QProcess::NotRunning);
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QCOMPARE(process.error(), QProcess::FailedToStart);
QVERIFY(process.exitCode() != 0); QVERIFY(process.exitCode() != 0);
} }
} }