Acquire save lock before getting a SQL connection

This commit is contained in:
games647
2023-04-12 09:16:17 +02:00
parent 0214827266
commit 4717bf82f7

View File

@ -143,11 +143,9 @@ public abstract class SQLStorage implements AuthStorage {
@Override @Override
public void save(StoredProfile playerProfile) { public void save(StoredProfile playerProfile) {
try (Connection con = dataSource.getConnection()) { String uuid = playerProfile.getOptId().map(UUIDAdapter::toMojangId).orElse(null);
String uuid = playerProfile.getOptId().map(UUIDAdapter::toMojangId).orElse(null); synchronized (playerProfile) {
try (Connection con = dataSource.getConnection()) {
playerProfile.getSaveLock().lock();
try {
if (playerProfile.isSaved()) { if (playerProfile.isSaved()) {
try (PreparedStatement saveStmt = con.prepareStatement(UPDATE_PROFILE)) { try (PreparedStatement saveStmt = con.prepareStatement(UPDATE_PROFILE)) {
saveStmt.setString(1, uuid); saveStmt.setString(1, uuid);
@ -174,11 +172,9 @@ public abstract class SQLStorage implements AuthStorage {
} }
} }
} }
} finally { } catch (SQLException ex) {
playerProfile.getSaveLock().unlock(); core.getPlugin().getLog().error("Failed to save playerProfile {}", playerProfile, ex);
} }
} catch (SQLException ex) {
core.getPlugin().getLog().error("Failed to save playerProfile {}", playerProfile, ex);
} }
} }