Ensure PackWriter releases its ObjectReader

Change-Id: I3f8af29066cc5a2132dc4a75c9654d97800f2f18
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
index 031ea2b..a716845 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
@@ -610,19 +610,22 @@ private List<ObjectToPack> sortByName() {
 	 *             stream.
 	 */
 	public void writePack(OutputStream packStream) throws IOException {
-		if ((reuseDeltas || reuseObjects) && reuseSupport != null)
-			searchForReuse();
+		try {
+			if ((reuseDeltas || reuseObjects) && reuseSupport != null)
+				searchForReuse();
 
-		out = new PackOutputStream(packStream, isDeltaBaseAsOffset());
+			out = new PackOutputStream(packStream, isDeltaBaseAsOffset());
 
-		writeMonitor.beginTask(WRITING_OBJECTS_PROGRESS, getObjectsNumber());
-		out.writeFileHeader(PACK_VERSION_GENERATED, getObjectsNumber());
-		writeObjects();
-		writeChecksum();
-
-		out = null;
-		reader.release();
-		writeMonitor.endTask();
+			int cnt = getObjectsNumber();
+			writeMonitor.beginTask(WRITING_OBJECTS_PROGRESS, cnt);
+			out.writeFileHeader(PACK_VERSION_GENERATED, cnt);
+			writeObjects();
+			writeChecksum();
+			writeMonitor.endTask();
+		} finally {
+			out = null;
+			reader.release();
+		}
 	}
 
 	private void searchForReuse() throws IOException {