From 5225455af09be17f715addee8ccbc42d542d88e2 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 20 Jun 2018 15:35:05 -0400 Subject: [PATCH] connection: fix statement leak from commiting transactions Closing the connection with closeJdbcConnection() prevented close() from closing registered statements. Closes #202. --- core/src/main/java/org/sql2o/Connection.java | 29 +++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/sql2o/Connection.java b/core/src/main/java/org/sql2o/Connection.java index 12caa6c1..1d79b55b 100644 --- a/core/src/main/java/org/sql2o/Connection.java +++ b/core/src/main/java/org/sql2o/Connection.java @@ -135,7 +135,10 @@ public Connection rollback(boolean closeConnection){ logger.warn("Could not roll back transaction. message: {}", e); } finally { - if(closeConnection) this.closeJdbcConnection(); + if(closeConnection) { + this.closeAndClearStatements(); + this.closeJdbcConnection(); + } } return this; } @@ -152,8 +155,10 @@ public Connection commit(boolean closeConnection){ throw new Sql2oException(e); } finally { - if(closeConnection) + if(closeConnection) { + this.closeAndClearStatements(); this.closeJdbcConnection(); + } } return this; } @@ -263,6 +268,17 @@ void removeStatement(Statement statement){ statements.remove(statement); } + private void closeAndClearStatements() { + for (Statement statement : statements) { + try { + getSql2o().getQuirks().closeStatement(statement); + } catch (Throwable e) { + logger.warn("Could not close statement.", e); + } + } + statements.clear(); + } + public void close() { boolean connectionIsClosed; try { @@ -273,14 +289,7 @@ public void close() { if (!connectionIsClosed) { - for (Statement statement : statements) { - try { - getSql2o().getQuirks().closeStatement(statement); - } catch (Throwable e) { - logger.warn("Could not close statement.", e); - } - } - statements.clear(); + closeAndClearStatements(); boolean rollback = rollbackOnClose; if (rollback) {