You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by El...@nokia.com on 2005/11/01 00:44:07 UTC
[PATCH] Socket not closed when exception caught in listener loop
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)
Re: [PATCH] Socket not closed when exception caught in listener loop
Posted by Henri Gomez <he...@gmail.com>.
commited, thanks
2005/11/1, Elias.Zaretsky@nokia.com <El...@nokia.com>:
> 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)
>