aboutsummaryrefslogtreecommitdiff
path: root/transport-helper.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-02-26 23:05:48 -0800
committerJunio C Hamano <gitster@pobox.com>2012-02-26 23:05:48 -0800
commit200e96e4af5e604174dff2f1487b26d3c42426f1 (patch)
tree928041c5e818de56f2012cf41cb3ef36fa99f809 /transport-helper.c
parentd365a432271d2f6384cda9c37fb2fe463bdc2850 (diff)
parentc34fe6304c0162c526b74e8639c94d8d026615fd (diff)
downloadgit-200e96e4af5e604174dff2f1487b26d3c42426f1.tar.gz
git-200e96e4af5e604174dff2f1487b26d3c42426f1.tar.xz
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
Diffstat (limited to 'transport-helper.c')
-rw-r--r--transport-helper.c13
1 files changed, 10 insertions, 3 deletions
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);