X-Git-Url: https://git.tokkee.org/?p=git.git;a=blobdiff_plain;f=transport-helper.c;h=f6b3b1fb79468ef85eb9581c7d44ff04c1bb61bc;hp=6f227e253bf638de37ce74347213657c23185afa;hb=HEAD;hpb=746b6fb96852accae8a4163f6edda23a4c6de0c7 diff --git a/transport-helper.c b/transport-helper.c index 6f227e253..f6b3b1fb7 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -9,6 +9,7 @@ #include "remote.h" #include "string-list.h" #include "thread-utils.h" +#include "sigchain.h" static int debug; @@ -220,15 +221,21 @@ static struct child_process *get_helper(struct transport *transport) static int disconnect_helper(struct transport *transport) { struct helper_data *data = transport->data; - struct strbuf buf = STRBUF_INIT; int res = 0; if (data->helper) { if (debug) fprintf(stderr, "Debug: Disconnecting.\n"); if (!data->no_disconnect_req) { - strbuf_addf(&buf, "\n"); - sendline(data, &buf); + /* + * Ignore write errors; there's nothing we can do, + * since we're about to close the pipe anyway. And the + * most likely error is EPIPE due to the helper dying + * to report an error itself. + */ + sigchain_push(SIGPIPE, SIG_IGN); + xwrite(data->helper->in, "\n", 1); + sigchain_pop(SIGPIPE); } close(data->helper->in); close(data->helper->out);