Re: [PATCHv3 02/13] xread: poll on non blocking fds
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 22, 2015, 15:58 UTC
- Message-ID
- <xmqqh9mm5tus.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <CAPig+cQKOEYYR3j-uEeFzF3-qAfqq4SdQrH8LPmSP0VmAOCtzw@mail.gmail.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
Show 16 quoted lines
>> while (1) {
>> nr = read(fd, buf, len);
>> - if ((nr < 0) && (errno == EAGAIN || errno == EINTR))
>> - continue;
>> + if (nr < 0) {
>> + if (errno == EINTR)
>> + continue;
>> + if (errno == EAGAIN || errno == EWOULDBLOCK) {
>> + struct pollfd pfd;
>> + int i;
>> + pfd.events = POLLIN;
>> + pfd.fd = fd;
>> + i = poll(&pfd, 1, 100);
>
> Why is this poll() using a timeout? Isn't that still a busy wait of
> sorts (even if less aggressive)?Good point. If we _were_ to have this kind of "hiding issues under the rug and continuing without issues" approach, I do not think we would need timeout for this poll(2). The caller accepted that it is willing to wait until we read up to len (which is capped, though) by not calling the nonblocking variant.