path: root/builtin/fetch-pack.c
diff options
authorJunio C Hamano <>2011-03-29 17:16:29 (GMT)
committerJunio C Hamano <>2011-03-29 19:19:58 (GMT)
commit8e9182e09127b20b8d8ce19655037991feac798d (patch)
treeb32ef068bd15b010aa9346ec10d2818618012d40 /builtin/fetch-pack.c
parent761ecf0bc7b6cddf311f00877c59e6381cdbdeea (diff)
enable "no-done" extension only when fetching over smart-http
When 'no-done' protocol extension is used, the upload-pack (i.e. the server side) process stops listening to the fetch-pack after issuing the final NAK, and starts sending the generated pack data back, but there may be more "have" send by the latter in flight that the fetch-pack is expecting to be responded with ACK/NAK. This will typically result in a deadlock (both will block on write that the other end never reads) or SIGPIPE on the fetch-pack end (upload-pack will finish writing a small pack and goes away). Disable it unless fetch-pack is running under smart-http, where there is no such streaming issue. Signed-off-by: Junio C Hamano <> Acked-by: Shawn O. Pearce <>
Diffstat (limited to 'builtin/fetch-pack.c')
1 files changed, 2 insertions, 1 deletions
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 59fbda5..52707a8 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -708,7 +708,8 @@ static struct ref *do_fetch_pack(int fd[2],
if (server_supports("no-done")) {
if (args.verbose)
fprintf(stderr, "Server supports no-done\n");
- no_done = 1;
+ if (args.stateless_rpc)
+ no_done = 1;
else if (server_supports("multi_ack")) {