xwrite: poll on non-blocking FDs
commitef1cf0167a362cd504afdcc0eef4c3200ea6dfbb
authorEric Wong <e@80x24.org>
Sun, 26 Jun 2016 23:21:12 +0000 (26 23:21 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Jun 2016 15:34:15 +0000 (27 08:34 -0700)
tree16d11b77fbdbcd297617073c3cedfe2070ddef3d
parentc22f6202052ca84c68df4fbb16e42c826d429558
xwrite: poll on non-blocking FDs

write(2) can hit the same EAGAIN/EWOULDBLOCK errors as read(2),
so busy-looping on a non-blocking FD is a waste of resources.

Currently, I do not know of a way for this happen:

* the NonBlocking directive in systemd does not apply to stdin,
  stdout, or stderr.

* xinetd provides no way to set the non-blocking flag at all

But theoretically, it's possible a careless C10K HTTP server
could use pipe2(..., O_NONBLOCK) to setup a pipe for
git-http-backend with only the intent to use non-blocking reads;
but accidentally leave non-blocking set on the write end passed
as stdout to git-upload-pack.

Followup-to: 1079c4be0b720 ("xread: poll on non blocking fds")

Signed-off-by: Eric Wong <e@80x24.org>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
wrapper.c