Author: robbie
Date: Sat Feb  4 12:54:02 2012
New Revision: 1240497

URL: http://svn.apache.org/viewvc?rev=1240497&view=rev
Log:
QPID-3810: close an accepted socket when exceptions occur in order to prevent 
leaking, wrap debug statement

Modified:
    
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java

Modified: 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java?rev=1240497&r1=1240496&r2=1240497&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
 (original)
+++ 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
 Sat Feb  4 12:54:02 2012
@@ -201,9 +201,10 @@ public class IoNetworkTransport implemen
             {
                 while (!_closed)
                 {
+                    Socket socket = null;
                     try
                     {
-                        Socket socket = _serverSocket.accept();
+                        socket = _serverSocket.accept();
                         socket.setTcpNoDelay(_config.getTcpNoDelay());
 
                         final Integer sendBufferSize = 
_config.getSendBufferSize();
@@ -223,12 +224,14 @@ public class IoNetworkTransport implemen
                     catch(RuntimeException e)
                     {
                         LOGGER.error("Error in Acceptor thread on port " + 
_config.getPort(), e);
+                        closeSocketIfNecessary(socket);
                     }
                     catch(IOException e)
                     {
                         if(!_closed)
                         {
                             LOGGER.error("Error in Acceptor thread on port " + 
_config.getPort(), e);
+                            closeSocketIfNecessary(socket);
                             try
                             {
                                 //Delay to avoid tight spinning the loop 
during issues such as too many open files
@@ -236,7 +239,8 @@ public class IoNetworkTransport implemen
                             }
                             catch (InterruptedException ie)
                             {
-                                //ignore
+                                LOGGER.debug("Stopping acceptor due to 
interrupt request");
+                                _closed = true;
                             }
                         }
                     }
@@ -244,11 +248,27 @@ public class IoNetworkTransport implemen
             }
             finally
             {
-                LOGGER.debug("Acceptor exiting, no new connections will be 
accepted on port " + _config.getPort());
+                if(LOGGER.isDebugEnabled())
+                {
+                    LOGGER.debug("Acceptor exiting, no new connections will be 
accepted on port " + _config.getPort());
+                }
             }
         }
 
-
+        private void closeSocketIfNecessary(final Socket socket)
+        {
+            if(socket != null)
+            {
+                try
+                {
+                    socket.close();
+                }
+                catch (IOException e)
+                {
+                    LOGGER.debug("Exception while closing socket", e);
+                }
+            }
+        }
     }
 
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to