On Sun, Jun 26, 2016 at 11:21:12PM +0000, Eric Wong wrote: > 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") I think this is sensible. I don't know of a way for it to happen either, but who knows what environments people will spawn git in (especially http-backend, as we are at the mercy of the webserver). So it's a good defensive measure, it shouldn't affect normal use at all (because blocking descriptors would never return EAGAIN), and it can't possibly hurt anybody expecting to use xwrite() non-blockingly to get EAGAIN (because we already spin on it; this just converts the spin to a poll). -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html