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 80e49a7a64e0272ee0c153de366e6767d1951bde
Author: Guillaume Nodet <[email protected]>
AuthorDate: Sun Jun 7 06:33:16 2026 +0000

    Fix WeakInternPool.intern() non-atomic check-then-act
    
    F-09: Use map.compute() instead of separate get/put to make the
    interning operation atomic, preventing duplicate objects from
    defeating heap deduplication during concurrent descriptor resolution.
---
 .../aether/internal/impl/collect/DataPool.java      | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
index 46c217952..84095e09c 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
@@ -564,16 +564,21 @@ public final class DataPool {
         }
 
         @Override
+        @SuppressWarnings("unchecked")
         public V intern(K key, V value) {
-            WeakReference<V> pooledRef = map.get(key);
-            if (pooledRef != null) {
-                V pooled = pooledRef.get();
-                if (pooled != null) {
-                    return pooled;
+            Object[] result = new Object[1];
+            map.compute(key, (k, existingRef) -> {
+                if (existingRef != null) {
+                    V pooled = existingRef.get();
+                    if (pooled != null) {
+                        result[0] = pooled;
+                        return existingRef;
+                    }
                 }
-            }
-            map.put(key, new WeakReference<>(value));
-            return value;
+                result[0] = value;
+                return new WeakReference<>(value);
+            });
+            return (V) result[0];
         }
     }
 }

Reply via email to