6850402: Deadlock on sun.security.jca.ProviderConfig starting from jdk7-b55
authorvaleriep
Thu, 14 Oct 2010 18:01:47 -0700
changeset 6895 92894a4882e0
parent 6894 361524087cdb
child 6896 d229d56fd918
6850402: Deadlock on sun.security.jca.ProviderConfig starting from jdk7-b55 Summary: Reduced the scope of locking Reviewed-by: vinnie
jdk/src/share/classes/sun/security/jca/Providers.java
--- a/jdk/src/share/classes/sun/security/jca/Providers.java	Thu Oct 14 17:59:58 2010 -0700
+++ b/jdk/src/share/classes/sun/security/jca/Providers.java	Thu Oct 14 18:01:47 2010 -0700
@@ -159,15 +159,18 @@
      * could not be loaded) removed. This is the list we need to
      * present to applications.
      */
-    public static synchronized ProviderList getFullProviderList() {
-        ProviderList list = getThreadProviderList();
-        if (list != null) {
-            ProviderList newList = list.removeInvalid();
-            if (newList != list) {
-                changeThreadProviderList(newList);
-                list = newList;
+    public static ProviderList getFullProviderList() {
+        ProviderList list;
+        synchronized (Providers.class) {
+            list = getThreadProviderList();
+            if (list != null) {
+                ProviderList newList = list.removeInvalid();
+                if (newList != list) {
+                    changeThreadProviderList(newList);
+                    list = newList;
+                }
+                return list;
             }
-            return list;
         }
         list = getSystemProviderList();
         ProviderList newList = list.removeInvalid();