From dc81e51c2c80f8c8c1bcdb31370b67c6dde08e0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 19:24:36 +0000 Subject: [PATCH 1/2] Bump the gradle-quality-stack group across 1 directory with 6 updates Bumps the gradle-quality-stack group with 6 updates in the / directory: | Package | From | To | | --- | --- | --- | | [org.awaitility:awaitility](https://github.com/awaitility/awaitility) | `4.2.1` | `4.3.0` | | [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) | `5.10.2` | `6.1.0` | | [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit-framework) | `5.10.2` | `6.1.0` | | [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit-framework) | `1.10.2` | `6.1.0` | | [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) | `4.8.6` | `4.10.2` | | com.github.spotbugs | `6.0.12` | `6.5.6` | Updates `org.awaitility:awaitility` from 4.2.1 to 4.3.0 - [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt) - [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.1...awaitility-4.3.0) Updates `org.junit.jupiter:junit-jupiter` from 5.10.2 to 6.1.0 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.10.2...r6.1.0) Updates `org.junit.jupiter:junit-jupiter-params` from 5.10.2 to 6.1.0 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.10.2...r6.1.0) Updates `org.junit.jupiter:junit-jupiter-params` from 5.10.2 to 6.1.0 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r5.10.2...r6.1.0) Updates `org.junit.platform:junit-platform-launcher` from 1.10.2 to 6.1.0 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/commits/r6.1.0) Updates `com.github.spotbugs:spotbugs-annotations` from 4.8.6 to 4.10.2 - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.6...4.10.2) Updates `com.github.spotbugs` from 6.0.12 to 6.5.6 --- updated-dependencies: - dependency-name: com.github.spotbugs dependency-version: 6.5.6 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-quality-stack - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-version: 4.10.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-quality-stack - dependency-name: org.awaitility:awaitility dependency-version: 4.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-quality-stack - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gradle-quality-stack - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gradle-quality-stack - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gradle-quality-stack - dependency-name: org.junit.platform:junit-platform-launcher dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gradle-quality-stack ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8a00ba7..fb9c150 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] -awaitility = "4.2.1" +awaitility = "4.3.0" checkstyle = "10.12.5" jackson = "2.17.2" jacoco = "0.8.12" -junit = "5.10.2" -junit-platform = "1.10.2" -spotbugs = "6.0.12" -spotbugs-annotations = "4.8.6" +junit = "6.1.0" +junit-platform = "6.1.0" +spotbugs = "6.5.6" +spotbugs-annotations = "4.10.2" spotless = "6.25.0" [libraries] From 1b12b5d95513e92e99b9345d8fa07293bfe1684c Mon Sep 17 00:00:00 2001 From: "Andrei.Ovcharenko" Date: Wed, 17 Jun 2026 10:37:01 +0300 Subject: [PATCH 2/2] fix: use private history store lock --- .../networkchat/network/ChatHistoryStore.java | 57 +++++++++++-------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/main/java/dev/krotname/networkchat/network/ChatHistoryStore.java b/src/main/java/dev/krotname/networkchat/network/ChatHistoryStore.java index c8afa1a..e13e576 100644 --- a/src/main/java/dev/krotname/networkchat/network/ChatHistoryStore.java +++ b/src/main/java/dev/krotname/networkchat/network/ChatHistoryStore.java @@ -24,6 +24,7 @@ public final class ChatHistoryStore { private final Path historyFile; private final int historyLimit; private final List messages = new ArrayList<>(); + private final Object lock = new Object(); private final boolean enabled; private int corruptRecordCount; @@ -45,41 +46,49 @@ public static ChatHistoryStore open(Path historyFile, int historyLimit) { return new ChatHistoryStore(historyFile, historyLimit, true); } - public synchronized void save(ChatMessage message) { - if (!enabled || !isPersistable(message)) { - return; + public void save(ChatMessage message) { + synchronized (lock) { + if (!enabled || !isPersistable(message)) { + return; + } + messages.add(message); + trimToLimit(); + rewrite(); } - messages.add(message); - trimToLimit(); - rewrite(); } - public synchronized List recentRoomMessages(String roomName, int limit) { - if (limit <= 0) { - return List.of(); - } - List roomMessages = new ArrayList<>(); - for (ChatMessage message : messages) { - if (message.type() == MessageType.ROOM_TEXT && roomName.equals(message.room())) { - roomMessages.add(message); + public List recentRoomMessages(String roomName, int limit) { + synchronized (lock) { + if (limit <= 0) { + return List.of(); } + List roomMessages = new ArrayList<>(); + for (ChatMessage message : messages) { + if (message.type() == MessageType.ROOM_TEXT && roomName.equals(message.room())) { + roomMessages.add(message); + } + } + return last(roomMessages, limit); } - return last(roomMessages, limit); } - public synchronized Set knownRooms() { - Set rooms = new TreeSet<>(); - rooms.add(ChatMessage.GENERAL_ROOM); - for (ChatMessage message : messages) { - if (message.room() != null && !message.room().isBlank()) { - rooms.add(message.room()); + public Set knownRooms() { + synchronized (lock) { + Set rooms = new TreeSet<>(); + rooms.add(ChatMessage.GENERAL_ROOM); + for (ChatMessage message : messages) { + if (message.room() != null && !message.room().isBlank()) { + rooms.add(message.room()); + } } + return Collections.unmodifiableSet(rooms); } - return Collections.unmodifiableSet(rooms); } - public synchronized int corruptRecordCount() { - return corruptRecordCount; + public int corruptRecordCount() { + synchronized (lock) { + return corruptRecordCount; + } } private void load() {