diff options
-rw-r--r-- | src/corelib/io/qprocess.cpp | 4 | ||||
-rw-r--r-- | src/corelib/io/qprocess_p.h | 1 | ||||
-rw-r--r-- | src/corelib/io/qprocess_unix.cpp | 4 | ||||
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 11 |
4 files changed, 11 insertions, 9 deletions
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 6764273cb7..116bb78b8a 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -1145,10 +1145,8 @@ void QProcessPrivate::processFinished() cleanup(); - if (crashed) { - exitStatus = QProcess::CrashExit; + if (exitStatus == QProcess::CrashExit) setErrorAndEmit(QProcess::Crashed); - } // we received EOF now: emit q->readChannelFinished(); diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h index 929c06480b..e6f279d5f3 100644 --- a/src/corelib/io/qprocess_p.h +++ b/src/corelib/io/qprocess_p.h @@ -327,7 +327,6 @@ public: int exitCode = 0; QProcess::ExitStatus exitStatus = QProcess::NormalExit; - bool crashed = false; bool waitForStarted(const QDeadlineTimer &deadline); bool waitForReadyRead(const QDeadlineTimer &deadline); diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 9fbf869455..3ffe8b28e2 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -896,7 +896,7 @@ void QProcessPrivate::waitForDeadChild() EINTR_LOOP(ret, forkfd_wait(forkfd, &info, nullptr)); exitCode = info.status; - crashed = info.code != CLD_EXITED; + exitStatus = info.code == CLD_EXITED ? QProcess::NormalExit : QProcess::CrashExit; delete stateNotifier; stateNotifier = nullptr; @@ -906,7 +906,7 @@ void QProcessPrivate::waitForDeadChild() #if defined QPROCESS_DEBUG qDebug() << "QProcessPrivate::waitForDeadChild() dead with exitCode" - << exitCode << ", crashed?" << crashed; + << exitCode << ", crashed?" << (info.code != CLD_EXITED); #endif } diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 04c67b4070..650e9038cc 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -28,6 +28,8 @@ QT_BEGIN_NAMESPACE +constexpr UINT KillProcessExitCode = 0xf291; + using namespace Qt::StringLiterals; QProcessEnvironment QProcessEnvironment::systemEnvironment() @@ -632,7 +634,7 @@ void QProcessPrivate::terminateProcess() void QProcessPrivate::killProcess() { if (pid) - TerminateProcess(pid->hProcess, 0xf291); + TerminateProcess(pid->hProcess, KillProcessExitCode); } bool QProcessPrivate::waitForStarted(const QDeadlineTimer &) @@ -782,8 +784,11 @@ void QProcessPrivate::findExitCode() Q_ASSERT(pid); if (GetExitCodeProcess(pid->hProcess, &theExitCode)) { exitCode = theExitCode; - crashed = (exitCode == 0xf291 // our magic number, see killProcess - || (theExitCode >= 0x80000000 && theExitCode < 0xD0000000)); + if (exitCode == KillProcessExitCode + || (theExitCode >= 0x80000000 && theExitCode < 0xD0000000)) + exitStatus = QProcess::CrashExit; + else + exitStatus = QProcess::NormalExit; } } |