diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-02-26 23:05:48 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-02-26 23:05:48 -0800 |
commit | 200e96e4af5e604174dff2f1487b26d3c42426f1 (patch) | |
tree | 928041c5e818de56f2012cf41cb3ef36fa99f809 | |
parent | d365a432271d2f6384cda9c37fb2fe463bdc2850 (diff) | |
parent | c34fe6304c0162c526b74e8639c94d8d026615fd (diff) | |
download | git-200e96e4af5e604174dff2f1487b26d3c42426f1.tar.gz |
Merge branch 'sp/smart-http-failure-to-push'
* sp/smart-http-failure-to-push:
: Mask SIGPIPE on the command channel going to a transport helper
disconnect from remote helpers more gently
Conflicts:
transport-helper.c
-rw-r--r-- | transport-helper.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/transport-helper.c b/transport-helper.c index 6f227e253b..f6b3b1fb79 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); |