< 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,10 +27,11 @@
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,12 +89,13 @@
System.loadLibrary("rmi");
return null;
}});
}
- private static class Daemon extends Thread {
+ private static class Daemon implements Runnable {
+ @Override
public void run() {
for (;;) {
long l;
synchronized (lock) {
@@ -127,27 +129,21 @@
}
}
}
}
- private Daemon(ThreadGroup tg) {
- super(tg, null, "GC Daemon", 0L, false);
- }
-
- /* Create a new daemon thread in the root thread group */
+ /* Create a new daemon thread */
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;
+ 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 >