Fix closing connection on invalid connection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Dieser Commit ist enthalten in:
Lixfel 2023-01-15 12:34:18 +01:00
Ursprung bf1dde08c2
Commit dbd91bf41a

Datei anzeigen

@ -157,32 +157,36 @@ public class Statement implements AutoCloseable {
private <T> T withConnection(SQLRunnable<T> runnable, Object... objects) { private <T> T withConnection(SQLRunnable<T> runnable, Object... objects) {
Connection connection = aquireConnection(); Connection connection = aquireConnection();
T result;
try { try {
try { result = tryWithConnection(connection, runnable, objects);
return tryWithConnection(connection, runnable, objects); } catch (Throwable e) {
} finally {
if(connectionInvalid(connection)) { if(connectionInvalid(connection)) {
closeConnection(connection); closeConnection(connection);
return withConnection(runnable, objects);
} else { } else {
synchronized (connections) { synchronized (connections) {
connections.push(connection); connections.push(connection);
connections.notify(); connections.notify();
} }
}
}
} catch (SQLException e) {
if(connectionInvalid(connection)) {
return withConnection(runnable, objects);
} else {
throw new SecurityException("Failing sql statement", e); throw new SecurityException("Failing sql statement", e);
} }
} }
synchronized (connections) {
connections.push(connection);
connections.notify();
}
return result;
} }
private boolean connectionInvalid(Connection connection) { private boolean connectionInvalid(Connection connection) {
try { try {
return connection.isClosed(); return connection.isClosed() || !connection.isValid(1);
} catch (SQLException e) { } catch (SQLException e) {
logger.log(Level.INFO, "Could not check SQL connection status", e); // No database logging possible at this state logger.log(Level.INFO, "Could not check SQL connection status", e); // No database logging possible at this state
return true; return true;