3ccfc351fd
On Unix systems where the GUI event dispatcher uses a notification system for socket notifiers that is out of band compared to select(), it's possible for the QSocketNotifier to activate after the pipe has been read from. When that happened, the ioctl(2) call with FIONREAD might return 0 bytes available, which we interpreted to mean EOF. Instead of doing that, always try to read at least one byte and examine the returned byte count from read(2). If it returns 0, that's a real EOF; if it returns -1 EWOULDBLOCK, we simply ignore the situation. That's the case on OS X: the Cocoa event dispatcher uses CFSocket to get notifications and those use kevent (and, apparently, an auxiliary thread) instead of an in-thread select() or poll(). That means the event loop would activate the QSocketNotifier even though there is nothing to be read. Task-number: QTBUG-39488 Change-Id: I1a58b5b1db7a47034fb36a78a005ebff96290efb Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> |
||
---|---|---|
.. | ||
fileWriterProcess | ||
test | ||
testBatFiles | ||
testDetached | ||
testExitCodes | ||
testForwarding | ||
testGuiProcess | ||
testProcessCrash | ||
testProcessDeadWhileReading | ||
testProcessEcho | ||
testProcessEcho2 | ||
testProcessEcho3 | ||
testProcessEchoGui | ||
testProcessEnvironment | ||
testProcessEOF | ||
testProcessNormal | ||
testProcessOutput | ||
testProcessSpacesArgs | ||
testSetNamedPipeHandleState | ||
testSetWorkingDirectory | ||
testSoftExit | ||
testSpaceInName | ||
.gitignore | ||
qprocess.pri | ||
qprocess.pro | ||
tst_qprocess.cpp |