From a9035850c2024e7a80979a15ef4e5bd1776ae73d Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 1 Mar 2019 12:50:05 -0800 Subject: [PATCH] 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 --- java/com/google/gerrit/server/git/MergeUtil.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/java/com/google/gerrit/server/git/MergeUtil.java b/java/com/google/gerrit/server/git/MergeUtil.java index 5d7a27b49c..56e81e356a 100644 --- a/java/com/google/gerrit/server/git/MergeUtil.java +++ b/java/com/google/gerrit/server/git/MergeUtil.java @@ -349,13 +349,21 @@ public class MergeUtil { Map resolved = new HashMap<>(); for (Map.Entry> entry : mergeResults.entrySet()) { MergeResult 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(); + } } }