From b1003300c7d9f384b51adb7b143a77ad1ec17783 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 21 Jun 2012 10:04:55 -0700 Subject: [PATCH] Fix resource leak when changeMerge.test is true The changeMerge feature leaks a Repository handle every time it executes a test. For our installation of Gerrit, this leaks some file handles, which can cause the JVM to run out of descriptors and/or run out of native memory that back those objects. A Repository, like a ReviewDb, must always be closed by the caller after it is no longer required. A quick scan through other call sites indicates other uses are in fact closing, this was the only bug found. Change-Id: If3fac76e82478a5bf32085d704842d88926ddd97 --- .../main/java/com/google/gerrit/server/git/MergeOp.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java index 5ccf41405d..fa47a2c86a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java @@ -249,10 +249,12 @@ public class MergeOp { log.error("Test merge attempt for change: " + change.getId() + " failed", e); } finally { + if (repo != null) { + repo.close(); + } if (db != null) { db.close(); } - db = null; } } @@ -292,8 +294,9 @@ public class MergeOp { if (repo != null) { repo.close(); } - db.close(); - db = null; + if (db != null) { + db.close(); + } } }