MergeUtil: Destroy TemporaryBuffer after use

close() does not delete the underlying temp file, it just flushes the
results. To close it we must call destroy().

Change-Id: I1d6fc5359b139c6caa8dd6490e95cd1d00cb7ea7
This commit is contained in:
Dave Borowitz
2019-03-01 12:50:05 -08:00
parent 67c03a27f1
commit a9035850c2

View File

@@ -349,13 +349,21 @@ public class MergeUtil {
Map<String, ObjectId> resolved = new HashMap<>();
for (Map.Entry<String, MergeResult<? extends Sequence>> entry : mergeResults.entrySet()) {
MergeResult<? extends Sequence> p = entry.getValue();
try (TemporaryBuffer buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024)) {
@SuppressWarnings("resource") // TemporaryBuffer requires calling close before reading.
TemporaryBuffer buf = null;
try {
// TODO(dborowitz): Respect inCoreLimit here.
buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024);
fmt.formatMerge(buf, p, "BASE", oursNameFormatted, theirsNameFormatted, UTF_8);
buf.close();
buf.close(); // Flush file and close for writes, but leave available for reading.
try (InputStream in = buf.openInputStream()) {
resolved.put(entry.getKey(), ins.insert(Constants.OBJ_BLOB, buf.length(), in));
}
} finally {
if (buf != null) {
buf.destroy();
}
}
}