From: Jeff King Date: Mon, 27 Jun 2016 21:49:48 GMT Subject: Re: [PATCH 1/2] xread: retry after poll on EAGAIN/EWOULDBLOCK Message-ID: <20160627214947.GA17149@sigill.intra.peff.net> In-Reply-To: <20160627201311.GA7039@dcvr.yhbt.net> On Mon, Jun 27, 2016 at 08:13:11PM +0000, Eric Wong wrote: > > Quite a while ago, when I started doing code reviews professionally, I wondered > > if the code review procedure can be semi-automated, as automation helps keeping > > the error rate low. By that I mean having a check list which I can > > check off each point > > Maybe a test case or even a small unit test would've helped. > I didn't notice the problem in xread until: > > 1) I copied the code into xwrite > 2) s/POLLIN/POLLOUT/; > 3) forced EAGAIN using a patched, home-baked HTTP server > > The biggish comment before the poll() obscured the missing > "continue" for me. I read xread() before and did not notice > the missing "continue". Here's an easier reproduction: nonblock () { perl -e ' use Fcntl; fcntl(STDIN, F_SETFL, Fcntl::O_NONBLOCK); exec @ARGV; ' "$@" } { sleep 1 git pack-objects --all --stdout Maybe the following optional patch on top of this series > improves readability: > > ----------8<-------- > Subject: [PATCH 3/2] hoist out io_wait function for xread and xwrite > > At least for me, this improves the readability of xread and > xwrite; hopefully allowing missing "continue" statements to > be spotted more easily. IMHO the end result is much nicer with this patch. -Peff