From 24c4ada1f2af70f7ad521b9457dfb9f31ea7602f Mon Sep 17 00:00:00 2001 From: "dennis.mercuriali" Date: Fri, 30 Jan 2026 20:31:08 +0100 Subject: [PATCH] avoid concurrent mod in eviction --- .../java/blazingcache/client/CacheClient.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/blazingcache-core/src/main/java/blazingcache/client/CacheClient.java b/blazingcache-core/src/main/java/blazingcache/client/CacheClient.java index 1703afa..02a59e3 100644 --- a/blazingcache-core/src/main/java/blazingcache/client/CacheClient.java +++ b/blazingcache-core/src/main/java/blazingcache/client/CacheClient.java @@ -719,18 +719,15 @@ public void accept(EntryHandle t) { } }; - try { - cache.values().stream().sorted((EntryHandle o1, EntryHandle o2) -> { - long diff = o1.getLastGetTime() - o2.getLastGetTime(); - if (diff == 0) { - return 0; - } - return diff > 0 ? 1 : -1; - }).forEachOrdered(accumulator); - } catch (Exception dataChangedDuringSort) { - LOGGER.severe("dataChangedDuringSort: " + dataChangedDuringSort); - return; - } + List snapshot = new ArrayList<>(cache.values()); + snapshot.sort((EntryHandle o1, EntryHandle o2) -> { + long diff = o1.getLastGetTime() - o2.getLastGetTime(); + if (diff == 0) { + return 0; + } + return diff > 0 ? 1 : -1; + }); + snapshot.forEach(accumulator); if (!evictable.isEmpty()) { LOGGER.log(Level.INFO, "found {0} evictable entries", evictable.size());