summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch
blob: 50e4c6d7d67abbc3d7966b7be6c01fe93388e075 (plain) (blame)
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;
     }
 
     /**