This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push: new 4325332 [OWB-1344] ensure we atomically populate repeatableMethodCache, thanks Vincente Rossello for the report and analyzis 4325332 is described below commit 432533265f3ff69dab9d0a79762de7dbe174e8cf Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Wed Jul 29 13:29:18 2020 +0200 [OWB-1344] ensure we atomically populate repeatableMethodCache, thanks Vincente Rossello for the report and analyzis --- .../apache/webbeans/annotation/AnnotationManager.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java b/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java index 24033f4..b5442c4 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/annotation/AnnotationManager.java @@ -62,7 +62,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.ConcurrentMap; /** * Manages annotation usage by classes in this application. @@ -74,8 +74,7 @@ public final class AnnotationManager private Map<Class<? extends Annotation>, Boolean> checkedStereotypeAnnotations = new ConcurrentHashMap<>(); - private CopyOnWriteArraySet<Class<?>> repeatableMethodCheckedTypes = new CopyOnWriteArraySet<>(); - private Map<Class<?>, Optional<Method>> repeatableMethodCache = new ConcurrentHashMap<>(); + private ConcurrentMap<Class<?>, Optional<Method>> repeatableMethodCache = new ConcurrentHashMap<>(); private final BeanManagerImpl beanManagerImpl; private final WebBeansContext webBeansContext; @@ -938,23 +937,12 @@ public final class AnnotationManager public void clearCaches() { - repeatableMethodCheckedTypes.clear(); repeatableMethodCache.clear(); } public Optional<Method> getRepeatableMethod(Class<?> type) { - if (repeatableMethodCheckedTypes.contains(type)) - { - return repeatableMethodCache.get(type); - } - - Optional<Method> method = Optional.ofNullable(resolveRepeatableMethod(type)); - - repeatableMethodCheckedTypes.add(type); - repeatableMethodCache.put(type, method); // don't put null here! - - return method; + return repeatableMethodCache.computeIfAbsent(type, it -> Optional.ofNullable(resolveRepeatableMethod(it))); } protected Method resolveRepeatableMethod(Class<?> type)