diff options
author | Jeff King <peff@peff.net> | 2022-08-17 08:09:42 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-08-17 18:21:41 +0200 |
commit | c6d3cce6f3c4d1a8d9ebc556c38f1335afdfeb6c (patch) | |
tree | 4964570102a4b0745a4ebd13a2bebbc7ca06244f | |
parent | pipe_command(): avoid xwrite() for writing to pipe (diff) | |
download | git-c6d3cce6f3c4d1a8d9ebc556c38f1335afdfeb6c.tar.xz git-c6d3cce6f3c4d1a8d9ebc556c38f1335afdfeb6c.zip |
pipe_command(): handle ENOSPC when writing to a pipe
When write() to a non-blocking pipe fails because the buffer is full,
POSIX says we should see EAGAIN. But our mingw_write() compat layer on
Windows actually returns ENOSPC for this case. This is probably
something we want to correct, but given that we don't plan to use
non-blocking descriptors in a lot of places, we can work around it by
just catching ENOSPC alongside EAGAIN. If we ever do fix mingw_write(),
then this patch can be reverted.
We don't actually use a non-blocking pipe yet, so this is still just
preparation.
Helped-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | run-command.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/run-command.c b/run-command.c index e078c3046f..5fbaa8b5ac 100644 --- a/run-command.c +++ b/run-command.c @@ -1377,7 +1377,8 @@ static int pump_io_round(struct io_pump *slots, int nr, struct pollfd *pfd) io->u.out.len <= MAX_IO_SIZE ? io->u.out.len : MAX_IO_SIZE); if (len < 0) { - if (errno != EINTR && errno != EAGAIN) { + if (errno != EINTR && errno != EAGAIN && + errno != ENOSPC) { io->error = errno; close(io->fd); io->fd = -1; |