diff options
author | Shawn Pearce <spearce@spearce.org> | 2016-08-25 22:31:08 -0400 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org <gerrit@eclipse.org> | 2016-08-25 22:31:11 -0400 |
commit | c29363046dae6eb7d469cd86de0ba32c2ea9eef5 (patch) | |
tree | e587c53c1cd4c795e33d80f0e4cddc1c9028ac28 | |
parent | 1227165e27c589a5002840b5fd88f0bfc8a6433b (diff) | |
parent | 20d3f83f27946f9654c48f096b2f671f7d5e3662 (diff) | |
download | jgit-c29363046dae6eb7d469cd86de0ba32c2ea9eef5.tar.gz jgit-c29363046dae6eb7d469cd86de0ba32c2ea9eef5.zip |
Merge "Fix HttpClientConnection leaking temporary buffer files"
2 files changed, 33 insertions, 12 deletions
diff --git a/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java b/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java index a0eeef89fc..2d9d17a890 100644 --- a/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/HttpClientConnection.java +++ b/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 { - if (resp == null) - if (entity != null) { - if (req instanceof HttpEntityEnclosingRequest) { - HttpEntityEnclosingRequest eReq = (HttpEntityEnclosingRequest) req; - eReq.setEntity(entity); - } - resp = getClient().execute(req); - entity.getBuffer().close(); - entity = null; - } else - resp = getClient().execute(req); + if (resp != null) { + return; + } + + if (entity == null) { + resp = getClient().execute(req); + return; + } + + try { + if (req instanceof HttpEntityEnclosingRequest) { + HttpEntityEnclosingRequest eReq = (HttpEntityEnclosingRequest) req; + eReq.setEntity(entity); + } + resp = getClient().execute(req); + } finally { + entity.close(); + entity = null; + } } public Map<String, List<String>> getHeaderFields() { diff --git a/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/TemporaryBufferEntity.java b/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/TemporaryBufferEntity.java index 1ff168e237..377e5ca572 100644 --- a/org.eclipse.jgit.http.apache/src/org/eclipse/jgit/transport/http/apache/TemporaryBufferEntity.java +++ b/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 */ -public class TemporaryBufferEntity extends AbstractHttpEntity { +public class TemporaryBufferEntity extends AbstractHttpEntity + implements AutoCloseable { private TemporaryBuffer buffer; private Integer contentLength; @@ -106,4 +107,16 @@ public class TemporaryBufferEntity extends AbstractHttpEntity { public void setContentLength(int 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(); + } + } } |