* [PATCH] smart-http: Don't deadlock on server failure
@ 2010-08-06 21:19 Shawn O. Pearce
0 siblings, 0 replies; only message in thread
From: Shawn O. Pearce @ 2010-08-06 21:19 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
If the remote HTTP server fails (e.g. returns 404 or 500) when we
posted the RPC to it, we won't have sent anything to the background
Git process that is supposed to handle the stream. Because we
didn't send anything, its waiting for input from remote-curl, and
remote-curl cannot read its response payload because doing so would
lead to a deadlock.
Send the background task EOF on its input before we try to read
its response back, that way it will break out of its read loop
and terminate.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
This was found in Git 1.6.6.1, and exists since we added smart HTTP
in 1.6.6. Should apply at least to 'maint', if not older... :-)
remote-curl.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/remote-curl.c b/remote-curl.c
index 8f169dd..c9d8f60 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -491,11 +491,12 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads)
rpc->len = n;
err |= post_rpc(rpc);
}
- strbuf_read(&rpc->result, client.out, 0);
close(client.in);
- close(client.out);
client.in = -1;
+ strbuf_read(&rpc->result, client.out, 0);
+
+ close(client.out);
client.out = -1;
err |= finish_command(&client);
--
1.7.2.1.52.g7f7860
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2010-08-06 21:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-06 21:19 [PATCH] smart-http: Don't deadlock on server failure Shawn O. Pearce
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).