From d74732f5cd87b68aed10ea3fcfcb24171b9f5d67 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 1 Oct 2002 03:46:43 +0000 Subject: ObjectInputStream.java (resolveProxyClass): New method from Classpath. * java/io/ObjectInputStream.java (resolveProxyClass): New method from Classpath. * Makefile.in: Rebuilt. * Makefile.am (rmi_java_source_files): Added new files. * gnu/java/rmi/RMIMarshalledObjectInputStream.java, gnu/java/rmi/RMIMarshalledObjectOutputStream.java, gnu/java/rmi/server/ConnectionRunnerPool.java: New files from Classpath. * gnu/java/rmi/dgc/DGCImpl.java, gnu/java/rmi/dgc/DGCImpl_Skel.java, gnu/java/rmi/dgc/DGCImpl_Stub.java, gnu/java/rmi/registry/RegistryImpl_Skel.java, gnu/java/rmi/registry/RegistryImpl_Stub.java, gnu/java/rmi/server/RMIHashes.java, gnu/java/rmi/server/RMIObjectInputStream.java, gnu/java/rmi/server/RMIObjectOutputStream.java, gnu/java/rmi/server/UnicastConnection.java, gnu/java/rmi/server/UnicastConnectionManager.java, gnu/java/rmi/server/UnicastRef.java, gnu/java/rmi/server/UnicastServer.java, gnu/java/rmi/server/UnicastServerRef.java, java/rmi/MarshalledObject.java, java/rmi/server/RMIClassLoader.java, java/rmi/server/RemoteObject.java, java/rmi/server/UnicastRemoteObject.java, java/security/SecureClassLoader.java: Merged from Classpath. From-SVN: r57675 --- .../java/rmi/server/UnicastConnectionManager.java | 40 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'libjava/gnu/java/rmi/server/UnicastConnectionManager.java') diff --git a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java index fe08ad0814d..64fecdce2a0 100644 --- a/libjava/gnu/java/rmi/server/UnicastConnectionManager.java +++ b/libjava/gnu/java/rmi/server/UnicastConnectionManager.java @@ -57,9 +57,12 @@ public class UnicastConnectionManager implements Runnable, ProtocolConstants { private static String localhost; +// use different maps for server/client type UnicastConnectionManager private static Hashtable servers = new Hashtable(); +private static Hashtable clients = new Hashtable(); -private Thread serverThread; +// make serverThread volatile for poll +private volatile Thread serverThread; private ServerSocket ssock; String serverName; int serverPort; @@ -68,7 +71,9 @@ private RMIClientSocketFactory clientFactory; static { try { - localhost = InetAddress.getLocalHost().getHostName(); + //Use host address instead of host name to avoid name resolving issues + //localhost = InetAddress.getLocalHost().getHostName(); + localhost = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException _) { localhost = "localhost"; @@ -112,11 +117,16 @@ public static synchronized UnicastConnectionManager getInstance(String host, int if (csf == null) { csf = RMISocketFactory.getSocketFactory(); } + // change host name to host address to avoid name resolving issues + try{ + host = InetAddress.getByName(host).getHostAddress(); + }catch(Exception _){} + TripleKey key = new TripleKey(host, port, csf); - UnicastConnectionManager man = (UnicastConnectionManager)servers.get(key); + UnicastConnectionManager man = (UnicastConnectionManager)clients.get(key); if (man == null) { man = new UnicastConnectionManager(host, port, csf); - servers.put(key, man); + clients.put(key, man); } return (man); } @@ -198,18 +208,34 @@ public void startServer() { serverThread.start(); } +/** + * Stop a server on this manager + */ +public void stopServer() { + synchronized(this) { + if(serverThread != null){ + serverThread = null; + try{ + ssock.close(); + }catch(Exception _){} + } + } +} + /** * Server thread for connection manager. */ public void run() { - for (;;) { + for (;serverThread != null;) { // if serverThread==null, then exit thread try { //System.out.println("Waiting for connection on " + serverPort); UnicastConnection conn = getServerConnection(); - (new Thread(conn)).start(); + // use a thread pool to improve performance + // (new Thread(conn)).start(); + ConnectionRunnerPool.dispatchConnection(conn); } catch (Exception e) { - e.printStackTrace(); + // e.printStackTrace(); } } } -- cgit v1.2.3