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]