You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2016/09/06 12:08:50 UTC

karaf git commit: [KARAF-4686] Cleaning sun.rmi.transport.tcp.TCPEndpoint.localEndpoints cache

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 <gg...@redhat.com>
Authored: Wed Aug 31 17:49:30 2016 +0200
Committer: Guillaume Nodet <gn...@apache.org>
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) {
+            }
         }
     }