You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/01/29 23:40:08 UTC

svn commit: r1655881 - /qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java

Author: rgodfrey
Date: Thu Jan 29 22:40:08 2015
New Revision: 1655881

URL: http://svn.apache.org/r1655881
Log:
close sockets when connection is closed

Modified:
    qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java

Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java?rev=1655881&r1=1655880&r2=1655881&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/NonBlockingSenderReceiver.java Thu Jan 29 22:40:08 2015
@@ -46,6 +46,7 @@ import org.apache.qpid.transport.SenderE
 import org.apache.qpid.transport.network.Ticker;
 import org.apache.qpid.transport.network.TransportEncryption;
 import org.apache.qpid.transport.network.security.ssl.SSLUtil;
+import org.apache.qpid.util.SystemUtils;
 
 public class NonBlockingSenderReceiver  implements Sender<ByteBuffer>
 {
@@ -182,6 +183,19 @@ public class NonBlockingSenderReceiver
         }
         else
         {
+
+            if(!SystemUtils.isWindows())
+            {
+                try
+                {
+                    _socketChannel.shutdownInput();
+                }
+                catch (IOException e)
+                {
+                    LOGGER.info("Exception shutting down input for thread '" + _remoteSocketAddress + "': " + e);
+
+                }
+            }
             try
             {
                 while(!doWrite())
@@ -193,9 +207,22 @@ public class NonBlockingSenderReceiver
                 LOGGER.info("Exception performing final write/close for thread '" + _remoteSocketAddress + "': " + e);
 
             }
-
+            LOGGER.debug("Closing receiver");
             _receiver.closed();
 
+            try
+            {
+                if(!SystemUtils.isWindows())
+                {
+                    _socketChannel.shutdownOutput();
+                }
+
+                _socketChannel.close();
+            }
+            catch (IOException e)
+            {
+                LOGGER.info("Exception closing socket thread '" + _remoteSocketAddress + "': " + e);
+            }
         }
 
         return closed;
@@ -212,9 +239,11 @@ public class NonBlockingSenderReceiver
     public void close()
     {
         LOGGER.debug("Closing " + _remoteSocketAddress);
-        _closed.set(true);
-        _stateChanged.set(true);
-        _connection.getSelector().wakeup();
+        if(_closed.compareAndSet(false,true))
+        {
+            _stateChanged.set(true);
+            _connection.getSelector().wakeup();
+        }
     }
 
     private boolean doWrite() throws IOException



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org