forked from qt-creator/qt-creator
UnixPtyProcess: Fix read loop
Previously a value of "-1" from ::read would result in an endless loop. This could easily be reproduced by "cat /dev/random | base64" The buffer usage was also much more complicated than needed. A static readBuffer now keeps the amount of allocations lower. Change-Id: I5bb1a3c84b107ff8c2d3801bca8c6ae9a709cdb3 Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
17
src/libs/3rdparty/libptyqt/unixptyprocess.cpp
vendored
17
src/libs/3rdparty/libptyqt/unixptyprocess.cpp
vendored
@@ -164,19 +164,14 @@ bool UnixPtyProcess::startProcess(const QString &shellPath,
|
||||
QObject::connect(m_readMasterNotify, &QSocketNotifier::activated, [this](int socket) {
|
||||
Q_UNUSED(socket)
|
||||
|
||||
QByteArray buffer;
|
||||
int size = 1025;
|
||||
int readSize = 1024;
|
||||
QByteArray data;
|
||||
do {
|
||||
char nativeBuffer[size];
|
||||
int len = ::read(m_shellProcess.m_handleMaster, nativeBuffer, readSize);
|
||||
data = QByteArray(nativeBuffer, len);
|
||||
buffer.append(data);
|
||||
} while (data.size() == readSize); //last data block always < readSize
|
||||
const size_t maxRead = 16 * 1024;
|
||||
static std::array<char, maxRead> buffer;
|
||||
|
||||
m_shellReadBuffer.append(buffer);
|
||||
int len = ::read(m_shellProcess.m_handleMaster, buffer.data(), buffer.size());
|
||||
if (len > 0) {
|
||||
m_shellReadBuffer.append(buffer.data(), len);
|
||||
m_shellProcess.emitReadyRead();
|
||||
}
|
||||
});
|
||||
|
||||
QObject::connect(&m_shellProcess, &QProcess::finished, &m_shellProcess, [this](int exitCode) {
|
||||
|
Reference in New Issue
Block a user