summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2012-02-04 12:54:02 +0000
committerRobert Gemmell <robbie@apache.org>2012-02-04 12:54:02 +0000
commit8cab7b8df7829a0b93d13244868f927a3c3e1159 (patch)
tree1db4cb67733f7ee9fcc8df07a34b58097048bd01
parenta35c1e624ae5ce6a932d9ea95e6a936ab652b2f4 (diff)
downloadqpid-python-8cab7b8df7829a0b93d13244868f927a3c3e1159.tar.gz
QPID-3810: close an accepted socket when exceptions occur in order to prevent leaking, wrap debug statement
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1240497 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java28
1 files changed, 24 insertions, 4 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
index cf2f39c193..35f8752c06 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
@@ -201,9 +201,10 @@ public class IoNetworkTransport implements OutgoingNetworkTransport, IncomingNet
{
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 implements OutgoingNetworkTransport, IncomingNet
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 implements OutgoingNetworkTransport, IncomingNet
}
catch (InterruptedException ie)
{
- //ignore
+ LOGGER.debug("Stopping acceptor due to interrupt request");
+ _closed = true;
}
}
}
@@ -244,11 +248,27 @@ public class IoNetworkTransport implements OutgoingNetworkTransport, IncomingNet
}
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);
+ }
+ }
+ }
}
}