Re: [PATCH] Fix potential local deadlock during fetch-pack

6 views
Skip to first unread message

Erik Faye-Lund

unread,
Mar 30, 2011, 5:42:12 AM3/30/11
to Junio C Hamano, g...@vger.kernel.org, Shawn O. Pearce, msysGit, Johannes Sixt
On Tue, Mar 29, 2011 at 7:06 PM, Junio C Hamano <git...@pobox.com> wrote:
> The fetch-pack/upload-pack protocol relies on the underlying transport
> (local pipe or TCP socket) to have enough slack to allow one window worth
> of data in flight without blocking the writer.  Traditionally we always
> relied on being able to have a batch of 32 "have"s in flight (roughly 1.5k
> bytes) to stream.
>

Hmm, this explanation makes me wonder: Could this be related to the
deadlock we're experiencing with git-push over the git-protocol on
Windows when side-band-64k is enabled?

Erik Faye-Lund

unread,
Mar 30, 2011, 5:50:45 AM3/30/11
to Junio C Hamano, g...@vger.kernel.org, Shawn O. Pearce, msysGit, Johannes Sixt

No, It doesn't seem like that's it. The socket buffers appears to be
8k by default on Windows, which should be plenty, right?

---8<---
diff --git a/compat/mingw.c b/compat/mingw.c
index d527562..985c271 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1404,7 +1404,7 @@ int mingw_getnameinfo(const struct sockaddr *sa,
socklen_t salen,

int mingw_socket(int domain, int type, int protocol)
{
- int sockfd;
+ int sockfd, val, len;
SOCKET s;

ensure_socket_initialization();
@@ -1428,6 +1428,12 @@ int mingw_socket(int domain, int type, int protocol)
return error("unable to make a socket file descriptor: %s",
strerror(errno));
}
+
+ len = sizeof(val);
+ if (!getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&val, &len))
+ fprintf(stderr, "SO_RCVBUF: %d\n", val);
+ len = sizeof(val);
+ if (!getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&val, &len))
+ fprintf(stderr, "SO_SNDBUF: %d\n", val);
return sockfd;
}

---8<---

$ git push git://localhost
SO_RCVBUF: 8192
SO_SNDBUF: 8192
...

Shawn Pearce

unread,
Mar 31, 2011, 12:24:36 PM3/31/11
to kusm...@gmail.com, Junio C Hamano, g...@vger.kernel.org, msysGit, Johannes Sixt

I think its unrelated. It might also be a deadlock, but the push
protocol is quite a bit different. As far as I remember, there is no
risk of deadlock in the push protocol.

--
Shawn.

Reply all
Reply to author
Forward
0 new messages