forked from qt-creator/qt-creator
Fix handling of unfinished lines by QtcProcess callbacks
Don't detect a call to QtcProcess::kill() from inside the QtcProcess callback while awaiting inside QtcProcess::waitFor...(). That's not needed, since a call to kill() sends a stop message to the process launcher, so we wait for confirmation from process launcher instead. This may bring e.g. new read data from the running process. Fix a runBlockingStdOut() test so that when we write to the stdOut from the running process we flush the unfinished line so that it's not buffered inside the process. Change-Id: I7944ac214d8cb9e10a71715a7ef8bfacab6df7c9 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -1632,6 +1632,8 @@ void QtcProcess::runBlocking(EventLoopMode eventLoopMode)
|
||||
d->m_eventLoop = nullptr;
|
||||
d->m_stdOut.append(d->m_process->readAllStandardOutput());
|
||||
d->m_stdErr.append(d->m_process->readAllStandardError());
|
||||
d->m_stdOut.handleRest();
|
||||
d->m_stdErr.handleRest();
|
||||
|
||||
timer.stop();
|
||||
#ifdef QT_GUI_LIB
|
||||
@@ -1651,13 +1653,11 @@ void QtcProcess::runBlocking(EventLoopMode eventLoopMode)
|
||||
kill();
|
||||
waitForFinished(1000);
|
||||
}
|
||||
d->m_stdOut.append(d->m_process->readAllStandardOutput());
|
||||
d->m_stdErr.append(d->m_process->readAllStandardError());
|
||||
d->m_stdOut.handleRest();
|
||||
d->m_stdErr.handleRest();
|
||||
}
|
||||
|
||||
if (state() != QProcess::NotRunning)
|
||||
return;
|
||||
|
||||
d->m_stdOut.append(d->m_process->readAllStandardOutput());
|
||||
d->m_stdErr.append(d->m_process->readAllStandardError());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user