[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlrpc-dev
Subject:    Re: [PATCH] Socket not closed when exception caught in listener loop
From:       Henri Gomez <henri.gomez () gmail ! com>
Date:       2005-11-18 7:17:06
Message-ID: 6291fc850511172317o20943833h () mail ! gmail ! com
[Download RAW message or body]

commited, thanks

2005/11/1, Elias.Zaretsky@nokia.com <Elias.Zaretsky@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)
>

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic