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_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 {});
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user