]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pipe_command(): handle ENOSPC when writing to a pipe
authorJeff King <peff@peff.net>
Wed, 17 Aug 2022 06:09:42 +0000 (02:09 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Aug 2022 16:21:41 +0000 (09:21 -0700)
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>
run-command.c

index e078c3046f899df1e554b267770fb88dca9e8660..5fbaa8b5ac5b22ba212af634a4dd396fb6ed1852 100644 (file)
@@ -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;