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 {