Author: jgomes
Date: Tue Dec 21 21:59:54 2010
New Revision: 1051673

URL: http://svn.apache.org/viewvc?rev=1051673&view=rev
Log:
Call the exceptionHandler in Oneway() instead of throwing an exception if the 
connection is closed.  This is more consistent behavior.
Protect access to the closed variable in Close() using the myLock critical 
section lock.  Even though closed is an Atomic boolean, that code block should 
be protected by the critical section lock for consistency.
All passing unit tests continue to pass with these changes.

Modified:
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Tcp/TcpTransport.cs

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Tcp/TcpTransport.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Tcp/TcpTransport.cs?rev=1051673&r1=1051672&r2=1051673&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Tcp/TcpTransport.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Tcp/TcpTransport.cs
 Tue Dec 21 21:59:54 2010
@@ -54,15 +54,15 @@ namespace Apache.NMS.ActiveMQ.Transport.
                        this.wireformat = wireformat;
                }
 
-               ~TcpTransport() 
+               ~TcpTransport()
                {
                        Dispose(false);
                }
-               
-        protected virtual Stream CreateSocketStream()
-        {
-            return new NetworkStream(socket);
-        }
+
+               protected virtual Stream CreateSocketStream()
+               {
+                       return new NetworkStream(socket);
+               }
 
                /// <summary>
                /// Method Start
@@ -87,15 +87,15 @@ namespace Apache.NMS.ActiveMQ.Transport.
 
                                        started = true;
 
-                    // Initialize our Read and Writer instances.  Its not 
actually necessary
-                    // to have two distinct NetworkStream instances but for 
now the TcpTransport
-                    // will continue to do so for legacy reasons.
-                    socketWriter = new 
EndianBinaryWriter(CreateSocketStream());
-                    socketReader = new 
EndianBinaryReader(CreateSocketStream());
+                                       // Initialize our Read and Writer 
instances.  Its not actually necessary
+                                       // to have two distinct NetworkStream 
instances but for now the TcpTransport
+                                       // will continue to do so for legacy 
reasons.
+                                       socketWriter = new 
EndianBinaryWriter(CreateSocketStream());
+                                       socketReader = new 
EndianBinaryReader(CreateSocketStream());
 
                                        // now lets create the background read 
thread
-                                       readThread = new Thread(new 
ThreadStart(ReadLoop)) {IsBackground = true};
-                                   readThread.Start();
+                                       readThread = new Thread(new 
ThreadStart(ReadLoop)) { IsBackground = true };
+                                       readThread.Start();
                                }
                        }
                }
@@ -120,7 +120,8 @@ namespace Apache.NMS.ActiveMQ.Transport.
                        {
                                if(closed.Value)
                                {
-                                       throw new 
InvalidOperationException("Error writing to broker.  Transport connection is 
closed.");
+                                       this.exceptionHandler(this, new 
InvalidOperationException("Error writing to broker.  Transport connection is 
closed."));
+                                       return;
                                }
 
                                if(command is ShutdownInfo)
@@ -165,9 +166,9 @@ namespace Apache.NMS.ActiveMQ.Transport.
 
                public void Close()
                {
-                       if(closed.CompareAndSet(false, true))
+                       lock(myLock)
                        {
-                               lock(myLock)
+                               if(closed.CompareAndSet(false, true))
                                {
                                        try
                                        {
@@ -224,7 +225,7 @@ namespace Apache.NMS.ActiveMQ.Transport.
                                                                
readThread.Abort();
                                                        }
                                                }
-                                               
+
                                                readThread = null;
                                        }
 
@@ -356,23 +357,23 @@ namespace Apache.NMS.ActiveMQ.Transport.
 
                public Object Narrow(Type type)
                {
-                   return this.GetType().Equals(type) ? this : null;
+                       return this.GetType().Equals(type) ? this : null;
                }
 
-           public bool IsReconnectSupported
+               public bool IsReconnectSupported
                {
-                       get{ return false; }
+                       get { return false; }
                }
-           
-           public bool IsUpdateURIsSupported
+
+               public bool IsUpdateURIsSupported
                {
-                       get{ return false; }
+                       get { return false; }
                }
-               
+
                public void UpdateURIs(bool rebalance, Uri[] updatedURIs)
                {
                        throw new IOException();
-               }               
+               }
        }
 }
 


Reply via email to