Skip to content

Commit 4bc8902

Browse files
committed
📝 Fix session
1 parent 79c201d commit 4bc8902

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

src/main/java/fr/maxlego08/autoclick/SessionManager.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,23 @@ public void onClick(UUID uuid) {
6060

6161
private void endSession(UUID uuid, Session session) {
6262

63+
// Suppression atomique - empêche le double traitement
64+
// Si la session dans la map n'est pas celle qu'on essaie de terminer, on ne fait rien
65+
Session removedSession = sessions.remove(uuid);
66+
if (removedSession == null || removedSession != session) {
67+
// Session déjà traitée par un autre thread ou remplacée par une nouvelle session
68+
return;
69+
}
70+
71+
// Annuler la tâche programmée si elle existe
72+
var task = session.getTask();
73+
if (task != null) {
74+
task.cancel();
75+
session.setTask(null);
76+
}
77+
6378
var player = Bukkit.getPlayer(uuid);
6479
session.setFinishedAt(System.currentTimeMillis());
65-
sessions.remove(uuid);
6680

6781
var storage = this.plugin.getStorageManager();
6882

@@ -95,11 +109,6 @@ private void endSession(UUID uuid, Session session) {
95109
});
96110
});
97111
}
98-
99-
var task = session.getTask();
100-
if (task != null) task.cancel();
101-
session.setTask(null);
102-
103112
}
104113

105114
/**
@@ -137,8 +146,9 @@ private SessionResult verifySession(ClickSession session) {
137146
public void onQuit(PlayerQuitEvent event) {
138147

139148
var uuid = event.getPlayer().getUniqueId();
140-
if (sessions.containsKey(uuid)) {
141-
this.endSession(uuid, sessions.get(uuid));
149+
Session session = sessions.get(uuid);
150+
if (session != null) {
151+
this.endSession(uuid, session);
142152
}
143153
}
144154

0 commit comments

Comments
 (0)