Skip to content

Commit 86e1b3d

Browse files
committed
fix: prevent stdout data loss in CommandRunner
readyReadStandardOutput was consuming the buffer before Result was constructed, causing result.stdout to always be empty. Now accumulates data in a QByteArray buffer for both signal emission and final result.
1 parent f26bca2 commit 86e1b3d

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

src/backend/system/commandrunner.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ CommandRunner::Result CommandRunner::run(const QString &program, const QStringLi
99
{
1010
QProcess process;
1111

12+
// Tüm stdout verisini biriktir — hem anlık sinyal hem de sonuç için
13+
QByteArray stdoutBuf;
14+
1215
// Stdout'u anlık olarak sinyal olarak ilet
1316
connect(&process, &QProcess::readyReadStandardOutput, this, [&]() {
14-
const QString line = QString::fromUtf8(process.readAllStandardOutput()).trimmed();
17+
const QByteArray data = process.readAllStandardOutput();
18+
stdoutBuf.append(data);
19+
const QString line = QString::fromUtf8(data).trimmed();
1520
if (!line.isEmpty())
1621
emit outputLine(line);
1722
});
@@ -28,9 +33,13 @@ CommandRunner::Result CommandRunner::run(const QString &program, const QStringLi
2833

2934
process.waitForFinished(-1);
3035

36+
// waitForFinished sonrası kalan veriyi de oku
37+
const QByteArray remaining = process.readAllStandardOutput();
38+
stdoutBuf.append(remaining);
39+
3140
return Result {
3241
.exitCode = process.exitCode(),
33-
.stdout = QString::fromUtf8(process.readAllStandardOutput()),
42+
.stdout = QString::fromUtf8(stdoutBuf),
3443
.stderr = QString::fromUtf8(process.readAllStandardError()),
3544
};
3645
}

0 commit comments

Comments
 (0)