< 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 >