Merge branch 'stable-5.10' into stable-5.11

* stable-5.10:
  Fix connection leak for smart http connections

Change-Id: I3885c6114caed897f762f5ce523d3b27288205b2
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
index 2e5d18d..a5b3773 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
@@ -1529,14 +1529,19 @@
 		}
 
 		@Override
-		protected void doFetch(final ProgressMonitor monitor,
-				final Collection<Ref> want, final Set<ObjectId> have,
-				final OutputStream outputStream) throws TransportException {
-			try {
-				svc = new MultiRequestService(SVC_UPLOAD_PACK,
-						getProtocolVersion());
-				init(svc.getInputStream(), svc.getOutputStream());
+		protected void doFetch(ProgressMonitor monitor, Collection<Ref> want,
+				Set<ObjectId> have, OutputStream outputStream)
+				throws TransportException {
+			svc = new MultiRequestService(SVC_UPLOAD_PACK,
+					getProtocolVersion());
+			try (InputStream svcIn = svc.getInputStream();
+					OutputStream svcOut = svc.getOutputStream()) {
+				init(svcIn, svcOut);
 				super.doFetch(monitor, want, have, outputStream);
+			} catch (TransportException e) {
+				throw e;
+			} catch (IOException e) {
+				throw new TransportException(e.getMessage(), e);
 			} finally {
 				svc = null;
 			}
@@ -1560,13 +1565,20 @@
 		}
 
 		@Override
-		protected void doPush(final ProgressMonitor monitor,
-				final Map<String, RemoteRefUpdate> refUpdates,
+		protected void doPush(ProgressMonitor monitor,
+				Map<String, RemoteRefUpdate> refUpdates,
 				OutputStream outputStream) throws TransportException {
-			final Service svc = new MultiRequestService(SVC_RECEIVE_PACK,
+			Service svc = new MultiRequestService(SVC_RECEIVE_PACK,
 					getProtocolVersion());
-			init(svc.getInputStream(), svc.getOutputStream());
-			super.doPush(monitor, refUpdates, outputStream);
+			try (InputStream svcIn = svc.getInputStream();
+					OutputStream svcOut = svc.getOutputStream()) {
+				init(svcIn, svcOut);
+				super.doPush(monitor, refUpdates, outputStream);
+			} catch (TransportException e) {
+				throw e;
+			} catch (IOException e) {
+				throw new TransportException(e.getMessage(), e);
+			}
 		}
 	}