< prev index next >

src/java.rmi/share/classes/sun/rmi/transport/GC.java

Print this page
rev 15152 : 8157570: sun.rmi.transport.GC retains a strong reference to the context class loader
Reviewed-by: alanb, dfuchs, msheppar

*** 27,36 **** --- 27,37 ---- import java.security.AccessController; import java.security.PrivilegedAction; import java.util.SortedSet; import java.util.TreeSet; + import jdk.internal.misc.InnocuousThread; /** * Support for garbage-collection latency requests. *
*** 88,99 **** System.loadLibrary("rmi"); return null; }}); } ! private static class Daemon extends Thread { public void run() { for (;;) { long l; synchronized (lock) { --- 89,101 ---- System.loadLibrary("rmi"); return null; }}); } ! private static class Daemon implements Runnable { + @Override public void run() { for (;;) { long l; synchronized (lock) {
*** 127,153 **** } } } } ! private Daemon(ThreadGroup tg) { ! super(tg, null, "GC Daemon", 0L, false); ! } ! ! /* Create a new daemon thread in the root thread group */ public static void create() { PrivilegedAction<Void> pa = new PrivilegedAction<Void>() { public Void run() { ! ThreadGroup tg = Thread.currentThread().getThreadGroup(); ! for (ThreadGroup tgn = tg; ! tgn != null; ! tg = tgn, tgn = tg.getParent()); ! Daemon d = new Daemon(tg); ! d.setDaemon(true); ! d.setPriority(Thread.MIN_PRIORITY + 1); ! d.start(); ! GC.daemon = d; return null; }}; AccessController.doPrivileged(pa); } --- 129,149 ---- } } } } ! /* Create a new daemon thread */ public static void create() { PrivilegedAction<Void> pa = new PrivilegedAction<Void>() { public Void run() { ! Thread t = InnocuousThread.newSystemThread("RMI GC Daemon", ! new Daemon()); ! assert t.getContextClassLoader() == null; ! t.setDaemon(true); ! t.setPriority(Thread.MIN_PRIORITY + 1); ! t.start(); ! GC.daemon = t; return null; }}; AccessController.doPrivileged(pa); }
< prev index next >