diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-03-20 09:16:06 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-03-20 09:16:06 +0300 |
commit | 27cdbdd134f181fc97f9589039ed7c0d12759b5a (patch) | |
tree | 3a42ab156427cfa7c1b7bd2f7d08469b6fdfc434 /fetch-pack.c | |
parent | ea327760d38b03be552418de044843cd2f0dba2e (diff) | |
parent | 143588949c8a0672302403c722fc433a5bb2ea2a (diff) |
Merge branch 'jk/no-sigpipe-during-network-transport'
On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
the upload-pack that runs on the other end that hangs up after
detecting an error could cause "git fetch" to die with a signal,
which led to a flakey test. "git fetch" now ignores SIGPIPE during
the network portion of its operation (this is not a problem as we
check the return status from our write(2)s).
* jk/no-sigpipe-during-network-transport:
fetch: ignore SIGPIPE during network operation
fetch: avoid calling write_or_die()
Diffstat (limited to 'fetch-pack.c')
-rw-r--r-- | fetch-pack.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fetch-pack.c b/fetch-pack.c index 812be15d7e..e69993b2eb 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -191,8 +191,10 @@ static void send_request(struct fetch_pack_args *args, if (args->stateless_rpc) { send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX); packet_flush(fd); - } else - write_or_die(fd, buf->buf, buf->len); + } else { + if (write_in_full(fd, buf->buf, buf->len) < 0) + die_errno(_("unable to write to remote")); + } } static void insert_one_alternate_object(struct fetch_negotiator *negotiator, @@ -1163,7 +1165,8 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out, /* Send request */ packet_buf_flush(&req_buf); - write_or_die(fd_out, req_buf.buf, req_buf.len); + if (write_in_full(fd_out, req_buf.buf, req_buf.len) < 0) + die_errno(_("unable to write request to remote")); strbuf_release(&req_buf); return ret; |