fix error handling bug in QWindowsPipeReader
If ReadFile returns with an error then we must set our internal state accordingly. QWindowsPipeReader::readSequenceStarted must be set to false. If ReadFile fails, we're not within a read sequence. Also, we must handle the ERROR_BROKEN_PIPE error. Task-number: QTBUG-25342 Change-Id: Ic9247f170fa9cc47fa7e45d0f47ccfedac06a593 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
parent
44e0d2b328
commit
c6f3d919dd
@ -213,7 +213,8 @@ void QWindowsPipeReader::startAsyncRead()
|
||||
// We get notified by the QWinOverlappedIoNotifier - even in the synchronous case.
|
||||
return;
|
||||
} else {
|
||||
switch (GetLastError()) {
|
||||
const DWORD dwError = GetLastError();
|
||||
switch (dwError) {
|
||||
case ERROR_IO_PENDING:
|
||||
// This is not an error. We're getting notified, when data arrives.
|
||||
return;
|
||||
@ -223,16 +224,19 @@ void QWindowsPipeReader::startAsyncRead()
|
||||
// didn't fit into the pipe's system buffer.
|
||||
// We're getting notified by the QWinOverlappedIoNotifier.
|
||||
break;
|
||||
case ERROR_BROKEN_PIPE:
|
||||
case ERROR_PIPE_NOT_CONNECTED:
|
||||
{
|
||||
// It may happen, that the other side closes the connection directly
|
||||
// after writing data. Then we must set the appropriate socket state.
|
||||
readSequenceStarted = false;
|
||||
pipeBroken = true;
|
||||
emit pipeClosed();
|
||||
return;
|
||||
}
|
||||
default:
|
||||
emit winError(GetLastError(), QLatin1String("QWindowsPipeReader::startAsyncRead"));
|
||||
readSequenceStarted = false;
|
||||
emit winError(dwError, QLatin1String("QWindowsPipeReader::startAsyncRead"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ win32:TESTDATA += ../testBatFiles/*
|
||||
|
||||
include(../qprocess.pri)
|
||||
|
||||
win32:CONFIG += insignificant_test # QTBUG-25342 - sometimes hangs
|
||||
mac:CONFIG += insignificant_test # QTBUG-25895 - sometimes hangs
|
||||
|
||||
for(file, SUBPROGRAMS): TEST_HELPER_INSTALLS += "../$${file}/$${file}"
|
||||
|
Loading…
Reference in New Issue
Block a user