summaryrefslogtreecommitdiff
path: root/src/tools/processlauncher
diff options
context:
space:
mode:
authorAaron Barany <akb825@gmail.com>2022-04-19 02:28:30 -0700
committerAaron Barany <akb825@gmail.com>2022-04-19 19:39:24 +0000
commitdf0593b5e115b4b5c850fb4fd37e6b7ef679219d (patch)
treec4b250bc4d257fc5b0758b913eaf36841d2fd865 /src/tools/processlauncher
parent4de0f1701b4ea597471538d283e5f40cd3728d06 (diff)
downloadqt-creator-df0593b5e115b4b5c850fb4fd37e6b7ef679219d.tar.gz
Utils: Preserve output order with merged channels
Restored the process channel mode members to ProcessSetupData and StartProcessPacket and forward to the QProcess created in LaunchSocketHandler. LaunchSocketHandler now avoids reading from stderr for merged channels since it's guaranteed to not be available. This avoids asserts in Qt 6.3.0 and warnings in Qt 6.3.1 while preserving the original output order when an application has a mix of stdout and stderr output. Change-Id: I9f4541932cf9d8638b38658a5efea9cb5f1798f3 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Diffstat (limited to 'src/tools/processlauncher')
-rw-r--r--src/tools/processlauncher/launchersockethandler.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/tools/processlauncher/launchersockethandler.cpp b/src/tools/processlauncher/launchersockethandler.cpp
index b64e5ad055..af9e94d3bf 100644
--- a/src/tools/processlauncher/launchersockethandler.cpp
+++ b/src/tools/processlauncher/launchersockethandler.cpp
@@ -172,7 +172,8 @@ void LauncherSocketHandler::handleProcessFinished(Process *process)
packet.exitStatus = process->exitStatus();
packet.error = process->error();
packet.errorString = process->errorString();
- packet.stdErr = process->readAllStandardError();
+ if (process->processChannelMode() != QProcess::MergedChannels)
+ packet.stdErr = process->readAllStandardError();
packet.stdOut = process->readAllStandardOutput();
sendPacket(packet);
removeProcess(process->token());
@@ -193,6 +194,8 @@ void LauncherSocketHandler::handleStartPacket()
process->setEnvironment(packet.env);
process->setWorkingDirectory(packet.workingDir);
// Forwarding is handled by the LauncherInterface
+ process->setProcessChannelMode(packet.processChannelMode == QProcess::MergedChannels
+ ? QProcess::MergedChannels : QProcess::SeparateChannels);
process->setStandardInputFile(packet.standardInputFile);
ProcessStartHandler *handler = process->processStartHandler();
handler->setProcessMode(packet.processMode);
@@ -255,7 +258,8 @@ void LauncherSocketHandler::handleStopPacket()
packet.error = QProcess::Crashed;
packet.exitCode = -1;
packet.exitStatus = QProcess::CrashExit;
- packet.stdErr = process->readAllStandardError();
+ if (process->processChannelMode() != QProcess::MergedChannels)
+ packet.stdErr = process->readAllStandardError();
packet.stdOut = process->readAllStandardOutput();
sendPacket(packet);
}