QProcess/Win: fix crash in drainOutputPipes
stdoutReader->waitForReadyRead() can synchronously trigger the deletion of stdoutreader (via signal readyRead(), _q_canReadStandardOutput(), destroyChannel()). Analoguous for stderrReader. Task-number: QTBUG-33730 Change-Id: I8badac53e92a979c437838b2959b4c0445c8de81 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
parent
5ad1e2578b
commit
8dc8fe53f9
@ -654,11 +654,11 @@ bool QProcessPrivate::drainOutputPipes()
|
|||||||
bool readOperationActive = false;
|
bool readOperationActive = false;
|
||||||
if (stdoutReader) {
|
if (stdoutReader) {
|
||||||
readyReadEmitted |= stdoutReader->waitForReadyRead(0);
|
readyReadEmitted |= stdoutReader->waitForReadyRead(0);
|
||||||
readOperationActive = stdoutReader->isReadOperationActive();
|
readOperationActive = stdoutReader && stdoutReader->isReadOperationActive();
|
||||||
}
|
}
|
||||||
if (stderrReader) {
|
if (stderrReader) {
|
||||||
readyReadEmitted |= stderrReader->waitForReadyRead(0);
|
readyReadEmitted |= stderrReader->waitForReadyRead(0);
|
||||||
readOperationActive |= stderrReader->isReadOperationActive();
|
readOperationActive |= stderrReader && stderrReader->isReadOperationActive();
|
||||||
}
|
}
|
||||||
someReadyReadEmitted |= readyReadEmitted;
|
someReadyReadEmitted |= readyReadEmitted;
|
||||||
if (!readOperationActive || !readyReadEmitted)
|
if (!readOperationActive || !readyReadEmitted)
|
||||||
|
Loading…
Reference in New Issue
Block a user