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)

Reply via email to