Author: peter_firmstone
Date: Tue Jul 17 11:35:23 2012
New Revision: 1362452

URL: http://svn.apache.org/viewvc?rev=1362452&view=rev
Log:
Feeble attempt to fix failing test on Hudson Windows:

com/sun/jini/test/impl/locatordiscovery/BadLocatorDiscoveryListener.td

The commit may be reversed, I suspect that at class initialisation time of 
PreferredClassProvider the java Policy file has been instantiated, however it 
hasn't handed over to our policy implementation yet.  Try using lazy loading to 
avoid requiring RuntimePermission("getClassLoader") until after class 
initialisation has completed.

Modified:
    river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java

Modified: river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java?rev=1362452&r1=1362451&r2=1362452&view=diff
==============================================================================
--- river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java 
(original)
+++ river/jtsk/trunk/src/net/jini/loader/pref/PreferredClassProvider.java Tue 
Jul 17 11:35:23 2012
@@ -250,7 +250,7 @@ public class PreferredClassProvider exte
     private static String codebaseProperty = null;
     static {
        String prop = AccessController.doPrivileged(
-   new GetPropertyAction("java.rmi.server.codebase"));
+           new GetPropertyAction("java.rmi.server.codebase"));
        if (prop != null && prop.trim().length() > 0) {
            codebaseProperty = prop;
        }
@@ -259,18 +259,26 @@ public class PreferredClassProvider exte
     /** table of "local" class loaders */
     private static final Map localLoaders =
        Collections.synchronizedMap(new WeakHashMap());
-    static {
-       AccessController.doPrivileged(new PrivilegedAction() {
-           public Object run() {
-               for (ClassLoader loader = ClassLoader.getSystemClassLoader();
-                    loader != null;
-                    loader = loader.getParent())
-               {
-                   localLoaders.put(loader, null);
-               }
-               return null;
-           }
-       });
+    /** lazy load table of "local" class loaders to avoid java Policy 
+     * initialisation issues */
+    private static volatile boolean loaded = false;
+    static void load() {
+        if (loaded) return;
+        synchronized (localLoaders){
+            if (loaded) return; // Double checked
+            AccessController.doPrivileged(new PrivilegedAction() {
+                public Object run() {
+                    for (ClassLoader loader = 
ClassLoader.getSystemClassLoader();
+                         loader != null;
+                         loader = loader.getParent())
+                    {
+                        localLoaders.put(loader, null);
+                    }
+                    return null;
+                }
+            });
+            loaded = true;
+        }
     }
 
     /**
@@ -854,6 +862,7 @@ public class PreferredClassProvider exte
      * class loader
      */
     private static boolean isLocalLoader(ClassLoader loader) {
+        load();
        return (loader == null || localLoaders.containsKey(loader));
     }
     


Reply via email to