On Fri, Nov 19, 2021 at 02:21:58PM -0800, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > When fetching, we send the incoming pack to index-pack (or > > unpack-objects) via the sideband demuxer. If index-pack hits an error > > (e.g., because an object fails fsck), then it will die immediately. This > > may cause us to get SIGPIPE on the fetch, as we're still trying to write > > pack contents from the sideband demuxer (which is typically a thread, > > and thus takes down the whole fetch process). > > So, ... we'd die anyway and won't update the refs and anything that > leaves permanent damage to the repository either way, but we choose > a better way to die by not taking SIGPIPE, but to get an error from > one of the write()s or the final close(), which will lead us to more > "controlled" death using the normal error path? Yes, exactly. We'll be exiting either way; it's just a matter of racily changing the exit code and possibly the error message from the parent fetch process. So I do doubt this really hurts users much in practice, but making the tests robust seems worth it to me (because I found it after tracking down a flaky test failure). And because it _is_ a race in the code, I fixed it there rather than papering over the SIGPIPE exit in the test script. -Peff