From 0c4dd67a048b39470b9b95912e4912fecc405a85 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 19 May 2015 11:08:23 -0700 Subject: filter_buffer_or_fd(): ignore EPIPE We are explicitly ignoring SIGPIPE, as we fully expect that the filter program may not read our output fully. Ignore EPIPE that may come from writing to it as well. A new test was stolen from Jeff's suggestion. Helped-by: Jeff King Signed-off-by: Junio C Hamano --- convert.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'convert.c') diff --git a/convert.c b/convert.c index 9a5612e93d..f3bd3e93fb 100644 --- a/convert.c +++ b/convert.c @@ -356,9 +356,14 @@ static int filter_buffer_or_fd(int in, int out, void *data) sigchain_push(SIGPIPE, SIG_IGN); if (params->src) { - write_err = (write_in_full(child_process.in, params->src, params->size) < 0); + write_err = (write_in_full(child_process.in, + params->src, params->size) < 0); + if (errno == EPIPE) + write_err = 0; } else { write_err = copy_fd(params->fd, child_process.in); + if (write_err == COPY_WRITE_ERROR && errno == EPIPE) + write_err = 0; } if (close(child_process.in)) -- cgit v1.3