Ensure PackWriter releases its ObjectReader

Change-Id: I3f8af29066cc5a2132dc4a75c9654d97800f2f18
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce 2010-06-28 10:16:27 -07:00
parent e01abbd543
commit b5aa52e98a
1 changed files with 14 additions and 11 deletions

View File

@ -610,19 +610,22 @@ private List<ObjectToPack> sortByName() {
* stream. * stream.
*/ */
public void writePack(OutputStream packStream) throws IOException { public void writePack(OutputStream packStream) throws IOException {
if ((reuseDeltas || reuseObjects) && reuseSupport != null) try {
searchForReuse(); if ((reuseDeltas || reuseObjects) && reuseSupport != null)
searchForReuse();
out = new PackOutputStream(packStream, isDeltaBaseAsOffset()); out = new PackOutputStream(packStream, isDeltaBaseAsOffset());
writeMonitor.beginTask(WRITING_OBJECTS_PROGRESS, getObjectsNumber()); int cnt = getObjectsNumber();
out.writeFileHeader(PACK_VERSION_GENERATED, getObjectsNumber()); writeMonitor.beginTask(WRITING_OBJECTS_PROGRESS, cnt);
writeObjects(); out.writeFileHeader(PACK_VERSION_GENERATED, cnt);
writeChecksum(); writeObjects();
writeChecksum();
out = null; writeMonitor.endTask();
reader.release(); } finally {
writeMonitor.endTask(); out = null;
reader.release();
}
} }
private void searchForReuse() throws IOException { private void searchForReuse() throws IOException {