# HG changeset patch # User chegar # Date 1469718951 -3600 # Node ID 4ecd563fecf6c1931f90d7564755dd432a05f7e7 # Parent 53a6fb443c204482071382feeb4d20f6c997216a 8156824: com.sun.jndi.ldap.pool.PoolCleaner should clear its context class loader Reviewed-by: alanb, dfuchs diff -r 53a6fb443c20 -r 4ecd563fecf6 jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java --- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java Thu Jul 28 19:34:58 2016 +0530 +++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java Thu Jul 28 16:15:51 2016 +0100 @@ -39,6 +39,7 @@ import com.sun.jndi.ldap.pool.PoolCleaner; import com.sun.jndi.ldap.pool.Pool; +import jdk.internal.misc.InnocuousThread; /** * Contains utilities for managing connection pools of LdapClient. @@ -163,7 +164,17 @@ if (idleTimeout > 0) { // Create cleaner to expire idle connections - new PoolCleaner(idleTimeout, pools).start(); + PrivilegedAction pa = new PrivilegedAction() { + public Void run() { + Thread t = InnocuousThread.newSystemThread( + "LDAP PoolCleaner", + new PoolCleaner(idleTimeout, pools)); + assert t.getContextClassLoader() == null; + t.setDaemon(true); + t.start(); + return null; + }}; + AccessController.doPrivileged(pa); } if (debug) { diff -r 53a6fb443c20 -r 4ecd563fecf6 jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java --- a/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java Thu Jul 28 19:34:58 2016 +0530 +++ b/jdk/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java Thu Jul 28 16:15:51 2016 +0100 @@ -30,7 +30,7 @@ * * @author Rosanna Lee */ -final public class PoolCleaner extends Thread { +final public class PoolCleaner implements Runnable { final private Pool[] pools; final private long period; @@ -42,9 +42,9 @@ super(); this.period = period; this.pools = pools.clone(); - setDaemon(true); } + @Override public void run() { long threshold; while (true) {