Shell: Set pipes to non-blocking
authorBrad Jorsch <bjorsch@wikimedia.org>
Thu, 1 Feb 2018 18:45:35 +0000 (13:45 -0500)
committerBrad Jorsch <bjorsch@wikimedia.org>
Thu, 1 Feb 2018 21:04:12 +0000 (16:04 -0500)
commit38bf4c15215ff3def72c3f45378939109e6649a5
tree226cb04dd3348263e12e94a5d8a4150de1f480dc
parent0613928b342092c9751f6270565fa8457ec7d6b4
Shell: Set pipes to non-blocking

The select(2) system call only guarantees a "sufficiently small write"
can be made without blocking. It doesn't define what that means.

And on Linux the read might block too in certain cases, although I don't
know if any of them can occur here.

Regardless, set all the pipes to non-blocking, which avoids the blocking
that's behind T184171.

And then, since a non-blocking read might validly return empty-string or
a non-blocking write might validly return 0, use feof() to check for EOF
and actually close the write pipe when it runs out of data.

Bug: T184171
Change-Id: I403235a328630112b6920905730f933777e2d453
includes/shell/Command.php