# HG changeset patch # User chegar # Date 1469711553 -3600 # Thu Jul 28 14:12:33 2016 +0100 # Node ID 47aa816206866bf2d71000fbe757b4a3868621a5 # Parent decf1acca62d8f4f90a3f6292af6e3431ee6585d 8156824: com.sun.jndi.ldap.pool.PoolCleaner should clear its context class loader Reviewed-by: diff --git a/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java b/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java --- a/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java +++ b/src/java.naming/share/classes/com/sun/jndi/ldap/LdapPoolManager.java @@ -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 --git a/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java b/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java --- a/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java +++ b/src/java.naming/share/classes/com/sun/jndi/ldap/pool/PoolCleaner.java @@ -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) {