Hi, We ran into an issue were our client application using XMLRpcClientLite hangs if the maximum number of concurrent requests on the server is exceeded, i.e. runners.activeCount() > XmlRpc.getMaxThreads(). I found that a socket is not closed in those circumstances and therefore the client keeps waiting for the response. The proposed patch below would take care of this issue.
Thanks, Elias Zaretsky. Index: WebServer.java =================================================================== RCS file: /home/cvspublic/ws-xmlrpc/src/java/org/apache/xmlrpc/WebServer.java,v retrieving revision 1.28 diff -u -r1.28 WebServer.java --- WebServer.java 22 Apr 2005 10:25:57 -0000 1.28 +++ WebServer.java 31 Oct 2005 22:48:56 -0000 @@ -445,9 +445,11 @@ { while (listener != null) { + Socket socket = null; + Runner runner = null; try { - Socket socket = serverSocket.accept(); + socket = serverSocket.accept(); try { socket.setTcpNoDelay(true); @@ -459,7 +461,7 @@ if (allowConnection(socket)) { - Runner runner = getRunner(); + runner = getRunner(); runner.handle(socket); } else @@ -487,6 +489,19 @@ + err + ")."); err.printStackTrace(); } + finally + { + if (runner == null && socket != null) + { + try + { + socket.close(); + } + catch (Throwable e) + { + } + } + } } } catch (Exception exception)