forked from qt-creator/qt-creator
Utils: Work around readAllStandardError() with QProcess::MergedChannels
Instead of relying QProcess to operate with MergedChannels, keep the separate channels and merge inside QtcProcess. Fixes: QTCREATORBUG-27196 Change-Id: I3039267fcd6d90f95f8212642e17049b87af1156 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -222,6 +222,12 @@ void CallerHandle::handleStarted(const StartedSignal *launcherSignal)
|
|||||||
void CallerHandle::handleReadyRead(const ReadyReadSignal *launcherSignal)
|
void CallerHandle::handleReadyRead(const ReadyReadSignal *launcherSignal)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(isCalledFromCallersThread(), return);
|
QTC_ASSERT(isCalledFromCallersThread(), return);
|
||||||
|
if (m_setup->m_processChannelMode == QProcess::MergedChannels) {
|
||||||
|
m_stdout += launcherSignal->stdOut();
|
||||||
|
m_stdout += launcherSignal->stdErr();
|
||||||
|
if (!m_stdout.isEmpty())
|
||||||
|
emit readyReadStandardOutput();
|
||||||
|
} else {
|
||||||
if (m_setup->m_processChannelMode == QProcess::ForwardedOutputChannel
|
if (m_setup->m_processChannelMode == QProcess::ForwardedOutputChannel
|
||||||
|| m_setup->m_processChannelMode == QProcess::ForwardedChannels) {
|
|| m_setup->m_processChannelMode == QProcess::ForwardedChannels) {
|
||||||
std::cout << launcherSignal->stdOut().constData() << std::flush;
|
std::cout << launcherSignal->stdOut().constData() << std::flush;
|
||||||
@@ -239,6 +245,7 @@ void CallerHandle::handleReadyRead(const ReadyReadSignal *launcherSignal)
|
|||||||
emit readyReadStandardError();
|
emit readyReadStandardError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CallerHandle::handleFinished(const FinishedSignal *launcherSignal)
|
void CallerHandle::handleFinished(const FinishedSignal *launcherSignal)
|
||||||
{
|
{
|
||||||
|
@@ -205,8 +205,6 @@ void LauncherSocketHandler::handleStartPacket()
|
|||||||
process->setEnvironment(packet.env);
|
process->setEnvironment(packet.env);
|
||||||
process->setWorkingDirectory(packet.workingDir);
|
process->setWorkingDirectory(packet.workingDir);
|
||||||
// Forwarding is handled by the LauncherInterface
|
// Forwarding is handled by the LauncherInterface
|
||||||
process->setProcessChannelMode(packet.processChannelMode == QProcess::MergedChannels
|
|
||||||
? QProcess::MergedChannels : QProcess::SeparateChannels);
|
|
||||||
process->setStandardInputFile(packet.standardInputFile);
|
process->setStandardInputFile(packet.standardInputFile);
|
||||||
ProcessStartHandler *handler = process->processStartHandler();
|
ProcessStartHandler *handler = process->processStartHandler();
|
||||||
handler->setProcessMode(packet.processMode);
|
handler->setProcessMode(packet.processMode);
|
||||||
|
Reference in New Issue
Block a user