From 404f7a1b31f0117cda6e083a8cbab6b4de2e0338 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 18 Jan 2022 19:10:30 +0100 Subject: [PATCH] ConsoleProcess: Uniform the common interface of QtcProcess This is a preliminary step before merging ConsoleProcess into QtcProcess. Rename: processStarted() -> started() processFinished() -> finished() Change-Id: Ifd94722822c7628fc8130e3a6377d55d24db6eb3 Reviewed-by: hjk --- src/libs/utils/consoleprocess.cpp | 40 ++++++++----------- src/libs/utils/consoleprocess.h | 5 ++- src/plugins/debugger/terminal.cpp | 6 +-- .../projectexplorer/applicationlauncher.cpp | 4 +- .../devicesupport/sshdeviceprocess.cpp | 4 +- 5 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/libs/utils/consoleprocess.cpp b/src/libs/utils/consoleprocess.cpp index 6ccba92b784..e6c4cb8f1f0 100644 --- a/src/libs/utils/consoleprocess.cpp +++ b/src/libs/utils/consoleprocess.cpp @@ -596,7 +596,7 @@ bool ConsoleProcess::start() return true; } -void Utils::ConsoleProcess::cleanupAfterStartFailure(const QString &errorMessage) +void ConsoleProcess::cleanupAfterStartFailure(const QString &errorMessage) { stubServerShutdown(); emitError(QProcess::FailedToStart, errorMessage); @@ -604,6 +604,14 @@ void Utils::ConsoleProcess::cleanupAfterStartFailure(const QString &errorMessage d->m_tempFile = nullptr; } +void ConsoleProcess::finish(int exitCode, QProcess::ExitStatus exitStatus) +{ + d->m_appPid = 0; + d->m_appCode = exitCode; + d->m_appStatus = exitStatus; + emit finished(); +} + void Utils::ConsoleProcess::kickoffProcess() { #ifdef Q_OS_WIN @@ -640,8 +648,8 @@ void ConsoleProcess::killProcess() d->m_stubSocket->write("k", 1); d->m_stubSocket->flush(); } - d->m_appPid = 0; #endif + d->m_appPid = 0; } void ConsoleProcess::killStub() @@ -798,12 +806,10 @@ void ConsoleProcess::readStubOutput() emitError(QProcess::UnknownError, tr("Cannot obtain exit status from inferior: %1") .arg(winErrorMessage(GetLastError()))); cleanupInferior(); - d->m_appStatus = QProcess::NormalExit; - d->m_appCode = chldStatus; - emit processStopped(d->m_appCode, d->m_appStatus); + finish(chldStatus, QProcess::NormalExit); }); - emit processStarted(); + emit started(); } else { emitError(QProcess::UnknownError, msgUnexpectedOutput(out)); TerminateProcess(d->m_pid->hProcess, (unsigned)-1); @@ -822,17 +828,11 @@ void ConsoleProcess::readStubOutput() d->m_stubPid = out.mid(4).toInt(); } else if (out.startsWith("pid ")) { d->m_appPid = out.mid(4).toInt(); - emit processStarted(); + emit started(); } else if (out.startsWith("exit ")) { - d->m_appStatus = QProcess::NormalExit; - d->m_appCode = out.mid(5).toInt(); - d->m_appPid = 0; - emit processStopped(d->m_appCode, d->m_appStatus); + finish(out.mid(5).toInt(), QProcess::NormalExit); } else if (out.startsWith("crash ")) { - d->m_appStatus = QProcess::CrashExit; - d->m_appCode = out.mid(6).toInt(); - d->m_appPid = 0; - emit processStopped(d->m_appCode, d->m_appStatus); + finish(out.mid(6).toInt(), QProcess::CrashExit); } else { emitError(QProcess::UnknownError, msgUnexpectedOutput(out)); d->m_stubPid = 0; @@ -855,9 +855,7 @@ void ConsoleProcess::stubExited() if (d->m_hInferior != NULL) { TerminateProcess(d->m_hInferior, (unsigned)-1); cleanupInferior(); - d->m_appStatus = QProcess::CrashExit; - d->m_appCode = -1; - emit processStopped(d->m_appCode, d->m_appStatus); + finish(-1, QProcess::CrashExit); } #else stubServerShutdown(); @@ -865,10 +863,7 @@ void ConsoleProcess::stubExited() delete d->m_tempFile; d->m_tempFile = nullptr; if (d->m_appPid) { - d->m_appStatus = QProcess::CrashExit; - d->m_appCode = -1; - d->m_appPid = 0; - emit processStopped(d->m_appCode, d->m_appStatus); // Maybe it actually did not, but keep state consistent + finish(-1, QProcess::CrashExit); } #endif emit stubStopped(); @@ -893,7 +888,6 @@ void ConsoleProcess::cleanupInferior() d->inferiorFinishedNotifier = nullptr; CloseHandle(d->m_hInferior); d->m_hInferior = NULL; - d->m_appPid = 0; #endif } diff --git a/src/libs/utils/consoleprocess.h b/src/libs/utils/consoleprocess.h index c1eb4df5e7e..229747353b7 100644 --- a/src/libs/utils/consoleprocess.h +++ b/src/libs/utils/consoleprocess.h @@ -117,8 +117,8 @@ signals: void processError(const QString &errorString); // These reflect the state of the actual client process - void processStarted(); - void processStopped(int, QProcess::ExitStatus); + void started(); + void finished(); // These reflect the state of the console+stub void stubStarted(); @@ -129,6 +129,7 @@ private: void readStubOutput(); void stubExited(); void cleanupAfterStartFailure(const QString &errorMessage); + void finish(int exitCode, QProcess::ExitStatus exitStatus); static QString modeOption(Mode m); static QString msgCommChannelFailed(const QString &error); diff --git a/src/plugins/debugger/terminal.cpp b/src/plugins/debugger/terminal.cpp index 98d461b4555..6b9da60f41d 100644 --- a/src/plugins/debugger/terminal.cpp +++ b/src/plugins/debugger/terminal.cpp @@ -176,10 +176,10 @@ TerminalRunner::TerminalRunner(RunControl *runControl, connect(&m_stubProc, &ConsoleProcess::processError, this, &TerminalRunner::stubError); - connect(&m_stubProc, &ConsoleProcess::processStarted, + connect(&m_stubProc, &ConsoleProcess::started, this, &TerminalRunner::stubStarted); - connect(&m_stubProc, &ConsoleProcess::processStopped, - this, [this] { reportDone(); }); + connect(&m_stubProc, &ConsoleProcess::finished, + this, &TerminalRunner::reportDone); } void TerminalRunner::kickoffProcess() diff --git a/src/plugins/projectexplorer/applicationlauncher.cpp b/src/plugins/projectexplorer/applicationlauncher.cpp index 2e492171210..47fa9751d0c 100644 --- a/src/plugins/projectexplorer/applicationlauncher.cpp +++ b/src/plugins/projectexplorer/applicationlauncher.cpp @@ -149,11 +149,11 @@ ApplicationLauncherPrivate::ApplicationLauncherPrivate(ApplicationLauncher *pare m_consoleProcess.setSettings(Core::ICore::settings()); - connect(&m_consoleProcess, &ConsoleProcess::processStarted, + connect(&m_consoleProcess, &ConsoleProcess::started, this, &ApplicationLauncherPrivate::handleProcessStarted); connect(&m_consoleProcess, &ConsoleProcess::processError, this, &ApplicationLauncherPrivate::localConsoleProcessError); - connect(&m_consoleProcess, &ConsoleProcess::processStopped, this, [this] { + connect(&m_consoleProcess, &ConsoleProcess::finished, this, [this] { localProcessDone(m_consoleProcess.exitCode(), m_consoleProcess.exitStatus()); }); connect(&m_consoleProcess, &ConsoleProcess::errorOccurred, diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp index 3d558a4562a..07d5fbf519b 100644 --- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp +++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp @@ -195,9 +195,9 @@ void SshDeviceProcess::handleConnected() d->process->setUseTerminal(true); connect(&d->consoleProcess, &ConsoleProcess::errorOccurred, this, &DeviceProcess::error); - connect(&d->consoleProcess, &ConsoleProcess::processStarted, + connect(&d->consoleProcess, &ConsoleProcess::started, this, &SshDeviceProcess::handleProcessStarted); - connect(&d->consoleProcess, &ConsoleProcess::processStopped, + connect(&d->consoleProcess, &ConsoleProcess::finished, this, [this] { handleProcessFinished(d->consoleProcess.errorString()); }); connect(&d->consoleProcess, &ConsoleProcess::stubStopped, this, [this] { handleProcessFinished(d->consoleProcess.errorString()); });