diff options
author | Elliott Hughes <enh@google.com> | 2011-05-03 10:55:35 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2011-05-13 17:53:03 -0700 |
commit | 20b0c846435c5d89154d3e1d50ca26d0cb32f455 (patch) | |
tree | 7de8c86f514d4978d0f74beb7bb9702656578dcf /src/org/apache/http/impl/io/SocketOutputBuffer.java | |
parent | e59c288fca5a99d07f09494e8d03a228a347c3f8 (diff) | |
download | android_external_apache-http-20b0c846435c5d89154d3e1d50ca26d0cb32f455.tar.gz android_external_apache-http-20b0c846435c5d89154d3e1d50ca26d0cb32f455.tar.bz2 android_external_apache-http-20b0c846435c5d89154d3e1d50ca26d0cb32f455.zip |
Make Apache HttpClient play nice with large kernel socket buffers.
Given the large maximum size likely to be set for kernel socket buffers on LTE
devices, we need to stop Apache HttpClient from allocating some integer
multiple of that size on the heap for each socket. On one device, 16 HTTP
connections would fill the heap.
Bug: 3514259
Change-Id: I4a8c13882ad794ddbeaf53a6cdc4d42d1aa3fb2f
Diffstat (limited to 'src/org/apache/http/impl/io/SocketOutputBuffer.java')
-rw-r--r-- | src/org/apache/http/impl/io/SocketOutputBuffer.java | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/src/org/apache/http/impl/io/SocketOutputBuffer.java b/src/org/apache/http/impl/io/SocketOutputBuffer.java index efb91e9..c1d3b49 100644 --- a/src/org/apache/http/impl/io/SocketOutputBuffer.java +++ b/src/org/apache/http/impl/io/SocketOutputBuffer.java @@ -43,37 +43,26 @@ import org.apache.http.params.HttpParams; * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> * * @version $Revision: 560358 $ - * + * * @since 4.0 */ public class SocketOutputBuffer extends AbstractSessionOutputBuffer { public SocketOutputBuffer( - final Socket socket, + final Socket socket, int buffersize, final HttpParams params) throws IOException { super(); if (socket == null) { throw new IllegalArgumentException("Socket may not be null"); } - if (buffersize < 0) { - buffersize = socket.getReceiveBufferSize(); -// BEGIN android-changed - // Workaround for http://b/issue?id=1083103. - if (buffersize > 8096) { - buffersize = 8096; - } -// END android-changed - } - if (buffersize < 1024) { - buffersize = 1024; - } - -// BEGIN android-changed - socket.setSendBufferSize(buffersize * 3); -// END andrdoid-changed - - init(socket.getOutputStream(), buffersize, params); + // BEGIN android-changed + // Workaround for http://b/1083103 and http://b/3514259. We take + // 'buffersize' as a hint in the weakest sense, and always use + // an 8KiB heap buffer and leave the kernel buffer size alone, + // trusting the system to have set a network-appropriate default. + init(socket.getOutputStream(), 8192, params); + // END android-changed } - + } |