Browse Source

Merge "Fix HttpClientConnection leaking temporary buffer files"

stable-4.5
Shawn Pearce 8 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
c29363046d
  1. 18
      org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java
  2. 15
      org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/TemporaryBufferEntity.java

18
org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java

@ -226,17 +226,25 @@ public class HttpClientConnection implements HttpConnection {
} }
private void execute() throws IOException, ClientProtocolException { private void execute() throws IOException, ClientProtocolException {
if (resp == null) if (resp != null) {
if (entity != null) { return;
}
if (entity == null) {
resp = getClient().execute(req);
return;
}
try {
if (req instanceof HttpEntityEnclosingRequest) { if (req instanceof HttpEntityEnclosingRequest) {
HttpEntityEnclosingRequest eReq = (HttpEntityEnclosingRequest) req; HttpEntityEnclosingRequest eReq = (HttpEntityEnclosingRequest) req;
eReq.setEntity(entity); eReq.setEntity(entity);
} }
resp = getClient().execute(req); resp = getClient().execute(req);
entity.getBuffer().close(); } finally {
entity.close();
entity = null; entity = null;
} else }
resp = getClient().execute(req);
} }
public Map<String, List<String>> getHeaderFields() { public Map<String, List<String>> getHeaderFields() {

15
org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/TemporaryBufferEntity.java

@ -55,7 +55,8 @@ import org.eclipse.jgit.util.TemporaryBuffer;
* *
* @since 3.3 * @since 3.3
*/ */
public class TemporaryBufferEntity extends AbstractHttpEntity { public class TemporaryBufferEntity extends AbstractHttpEntity
implements AutoCloseable {
private TemporaryBuffer buffer; private TemporaryBuffer buffer;
private Integer contentLength; private Integer contentLength;
@ -106,4 +107,16 @@ public class TemporaryBufferEntity extends AbstractHttpEntity {
public void setContentLength(int contentLength) { public void setContentLength(int contentLength) {
this.contentLength = new Integer(contentLength); this.contentLength = new Integer(contentLength);
} }
/**
* Close destroys the associated buffer used to buffer the entity
*
* @since 4.5
*/
@Override
public void close() {
if (buffer != null) {
buffer.destroy();
}
}
} }

Loading…
Cancel
Save