Author: peter_firmstone
Date: Fri Nov 27 05:28:44 2015
New Revision: 1716792

URL: http://svn.apache.org/viewvc?rev=1716792&view=rev
Log:
Fix regression of sun bug ID:6304035

Modified:
    
river/jtsk/skunk/qa-refactor-namespace/trunk/src/net/jini/loader/LoadClass.java

Modified: 
river/jtsk/skunk/qa-refactor-namespace/trunk/src/net/jini/loader/LoadClass.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa-refactor-namespace/trunk/src/net/jini/loader/LoadClass.java?rev=1716792&r1=1716791&r2=1716792&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa-refactor-namespace/trunk/src/net/jini/loader/LoadClass.java 
(original)
+++ 
river/jtsk/skunk/qa-refactor-namespace/trunk/src/net/jini/loader/LoadClass.java 
Fri Nov 27 05:28:44 2015
@@ -18,6 +18,8 @@
 
 package net.jini.loader;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import org.apache.river.concurrent.RC;
 import org.apache.river.concurrent.Ref;
 import org.apache.river.concurrent.Referrer;
@@ -142,6 +144,8 @@ public class LoadClass {
 
     private static class GetClassTask implements Callable<Class> {
 
+        private static final ClassLoader SYSTEM_LOADER =
+                ClassLoader.getSystemClassLoader();
         private final String name;
         private final boolean initialize;
         private final ClassLoader loader;
@@ -154,7 +158,23 @@ public class LoadClass {
 
         @Override
         public Class call() throws ClassNotFoundException {
-            return Class.forName(name, initialize, loader);
+            try {
+                return Class.forName(name, initialize, loader);
+            } finally {
+                /**
+                 * See jtreg sun bug ID:6304035
+                 * This ensures that a thread doesn't unnecessarily hold 
+                 * a strong reference to a ClassLoader, thus preventing
+                 * it from being garbage collected.
+                 */
+                AccessController.doPrivileged(new PrivilegedAction(){
+                    public Object run() {
+                        
Thread.currentThread().setContextClassLoader(SYSTEM_LOADER);
+                        return null;
+                    }
+                });
+                
+            }
         }
 
     }


Reply via email to