Repository: karaf Updated Branches: refs/heads/master e653836d7 -> a1ad5b8ed
[KARAF-4686] Cleaning sun.rmi.transport.tcp.TCPEndpoint.localEndpoints cache Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/a1ad5b8e Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/a1ad5b8e Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/a1ad5b8e Branch: refs/heads/master Commit: a1ad5b8ed3be978828c0b1ef35a0010e4ef32ce8 Parents: e653836 Author: Grzegorz Grzybek <[email protected]> Authored: Wed Aug 31 17:49:30 2016 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Tue Sep 6 14:07:18 2016 +0200 ---------------------------------------------------------------------- .../karaf/management/RmiRegistryFactory.java | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/a1ad5b8e/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java ---------------------------------------------------------------------- diff --git a/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java b/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java index d5f284d..76139de 100644 --- a/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java +++ b/management/server/src/main/java/org/apache/karaf/management/RmiRegistryFactory.java @@ -19,6 +19,7 @@ package org.apache.karaf.management; import org.osgi.framework.BundleContext; import java.io.IOException; +import java.lang.reflect.Field; import java.net.Inet4Address; import java.net.InetAddress; import java.net.ServerSocket; @@ -31,6 +32,8 @@ import java.rmi.server.RMIServerSocketFactory; import java.rmi.server.RMISocketFactory; import java.rmi.server.UnicastRemoteObject; import java.util.Hashtable; +import java.util.Iterator; +import java.util.Map; import javax.net.ServerSocketFactory; import javax.net.SocketFactory; @@ -140,6 +143,27 @@ public class RmiRegistryFactory { Registry reg = registry; registry = null; UnicastRemoteObject.unexportObject(reg, true); + + // clear TCPEndpointCache + try { + Class<?> cls = getClass().getClassLoader().loadClass("sun.rmi.transport.tcp.TCPEndpoint"); + Field localEndpointsField = cls.getDeclaredField("localEndpoints"); + Field ssfField = cls.getDeclaredField("ssf"); + localEndpointsField.setAccessible(true); + ssfField.setAccessible(true); + Object localEndpoints = localEndpointsField.get(null); + if (localEndpoints != null) { + Map<Object, Object> map = (Map<Object, Object>) localEndpoints; + for (Iterator<Object> it = map.keySet().iterator(); it.hasNext(); ) { + Object key = it.next(); + Object ssf = ssfField.get(key); + if (ssf != null && ssf.getClass().getPackage().getName().equals("org.apache.karaf.management")) { + it.remove(); + } + } + } + } catch (Exception ignored) { + } } }
