# 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, BeanInfo> beanInfoCache; + BeanInfo beanInfo; synchronized (BEANINFO_CACHE) { - WeakCache, BeanInfo> beanInfoCache = - (WeakCache, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); + beanInfoCache = (WeakCache, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); if (beanInfoCache == null) { beanInfoCache = new WeakCache, 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; } /**