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; + } + }); + + } } }
