1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# HG changeset patch
# User andrew
# Date 1365711839 -3600
# Node ID df591e0dfd349dc5986cc17949939c588d5a9690
# Parent 06255d9f82761abc74c30f31fda00968ffef4bc3
6963811: Deadlock-prone locking changes in Introspector
Reviewed-by: peterz, rupashka
diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java
--- jdk/src/share/classes/java/beans/Introspector.java
+++ jdk/src/share/classes/java/beans/Introspector.java
@@ -170,21 +170,24 @@
if (!ReflectUtil.isPackageAccessible(beanClass)) {
return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
}
+ WeakCache<Class<?>, BeanInfo> beanInfoCache;
+ BeanInfo beanInfo;
synchronized (BEANINFO_CACHE) {
- WeakCache<Class<?>, BeanInfo> beanInfoCache =
- (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
+ beanInfoCache = (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
if (beanInfoCache == null) {
beanInfoCache = new WeakCache<Class<?>, BeanInfo>();
AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache);
}
- BeanInfo beanInfo = beanInfoCache.get(beanClass);
- if (beanInfo == null) {
- beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
+ beanInfo = beanInfoCache.get(beanClass);
+ }
+ if (beanInfo == null) {
+ beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
+ synchronized (BEANINFO_CACHE) {
beanInfoCache.put(beanClass, beanInfo);
}
- return beanInfo;
}
+ return beanInfo;
}
/**
|