This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit 3ee57067c0ea8d17cf44517b772a89610f493e9a
Author: Guillaume Nodet <[email protected]>
AuthorDate: Sun Jun 7 06:51:31 2026 +0000

    Fix GenericVersionScheme racy cache statistics
    
    F-24: Use a single computeIfAbsent() call instead of separate
    get() then computeIfAbsent(), and derive hit/miss statistics
    from whether the mapping function was invoked.
---
 .../aether/util/version/GenericVersionScheme.java       | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/version/GenericVersionScheme.java
 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/version/GenericVersionScheme.java
index 3dd7c5ca7..7188e1966 100644
--- 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/version/GenericVersionScheme.java
+++ 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/version/GenericVersionScheme.java
@@ -99,16 +99,19 @@ public class GenericVersionScheme extends 
VersionSchemeSupport {
         totalRequests.incrementAndGet();
         GLOBAL_TOTAL_REQUESTS.incrementAndGet();
 
-        GenericVersion existing = versionCache.get(version);
-        if (existing != null) {
-            cacheHits.incrementAndGet();
-            GLOBAL_CACHE_HITS.incrementAndGet();
-            return existing;
-        } else {
+        boolean[] created = {false};
+        GenericVersion result = versionCache.computeIfAbsent(version, v -> {
+            created[0] = true;
+            return new GenericVersion(v);
+        });
+        if (created[0]) {
             cacheMisses.incrementAndGet();
             GLOBAL_CACHE_MISSES.incrementAndGet();
-            return versionCache.computeIfAbsent(version, GenericVersion::new);
+        } else {
+            cacheHits.incrementAndGet();
+            GLOBAL_CACHE_HITS.incrementAndGet();
         }
+        return result;
     }
 
     /**

Reply via email to