diff options
author | Robert Gemmell <robbie@apache.org> | 2012-02-04 12:54:02 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2012-02-04 12:54:02 +0000 |
commit | 8cab7b8df7829a0b93d13244868f927a3c3e1159 (patch) | |
tree | 1db4cb67733f7ee9fcc8df07a34b58097048bd01 | |
parent | a35c1e624ae5ce6a932d9ea95e6a936ab652b2f4 (diff) | |
download | qpid-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.java | 28 |
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); + } + } + } } } |