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)