This is the lowest buffer size we actually require to keep the client and server sides from deadlocking against each other. Also added documentation, and renamed the symbol to better match its real purpose; naming the lower threshold we can allow for a buffer. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../jgit/transport/BasePackFetchConnection.java | 10 +++++++++- .../org/spearce/jgit/transport/TransportLocal.java | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/BasePackFetchConnection.java b/org.spearce.jgit/src/org/spearce/jgit/transport/BasePackFetchConnection.java index eaa94bd..1d1b801 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/BasePackFetchConnection.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/BasePackFetchConnection.java @@ -89,7 +89,15 @@ */ private static final int MAX_HAVES = 256; - protected static final int MAX_CLIENT_BUFFER = MAX_HAVES * 46 + 1024; + /** + * Amount of data the client sends before starting to read. + * <p> + * Any output stream given to the client must be able to buffer this many + * bytes before the client will stop writing and start reading from the + * input stream. If the output stream blocks before this many bytes are in + * the send queue, the system will deadlock. + */ + protected static final int MIN_CLIENT_BUFFER = 2 * 32 * 46 + 4; static final String OPTION_INCLUDE_TAG = "include-tag"; diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportLocal.java b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportLocal.java index cffdba1..428f73e 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportLocal.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportLocal.java @@ -175,7 +175,7 @@ InternalLocalFetchConnection() throws TransportException { // force the buffer to be big enough, otherwise it // will deadlock both threads. { - buffer = new byte[MAX_CLIENT_BUFFER]; + buffer = new byte[MIN_CLIENT_BUFFER]; } }; out_w = new PipedOutputStream(out_r); -- 1.6.3.48.g99c76 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html