You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/11/11 16:59:37 UTC

svn commit: r1033974 - /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs

Author: tabish
Date: Thu Nov 11 15:59:37 2010
New Revision: 1033974

URL: http://svn.apache.org/viewvc?rev=1033974&view=rev
Log:
Remove the uneeded lock used to access the marshalers array.

The WireFormatNegotiator ensure that the configure call is always protected such that no threads will be reading the marshalers while a reconfigure is in progress.

Modified:
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs?rev=1033974&r1=1033973&r2=1033974&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/OpenWire/OpenWireFormat.cs Thu Nov 11 15:59:37 2010
@@ -30,7 +30,6 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 	/// </summary>
 	public class OpenWireFormat : IWireFormat
 	{
-		private readonly object marshalLock = new object();
 		private readonly BaseDataStreamMarshaller[] dataMarshallers;
 		private const byte NULL_TYPE = 0;
 
@@ -141,22 +140,16 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 
 		public void clearMarshallers()
 		{
-			lock(this.marshalLock)
+			for(int i = 0; i < dataMarshallers.Length; i++)
 			{
-				for(int i = 0; i < dataMarshallers.Length; i++)
-				{
-					dataMarshallers[i] = null;
-				}
+				dataMarshallers[i] = null;
 			}
 		}
 
 		public void addMarshaller(BaseDataStreamMarshaller marshaller)
 		{
 			byte type = marshaller.GetDataStructureType();
-			lock(this.marshalLock)
-			{
-				dataMarshallers[type & 0xFF] = marshaller;
-			}
+			dataMarshallers[type & 0xFF] = marshaller;
 		}
 
 		private BaseDataStreamMarshaller GetDataStreamMarshallerForType(byte dataType)
@@ -176,24 +169,15 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 			{
 				DataStructure c = (DataStructure) o;
 				byte type = c.GetDataStructureType();
-				BaseDataStreamMarshaller dsm;
-				bool _tightEncodingEnabled;
-				bool _sizePrefixDisabled;
-
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(type);
-					_tightEncodingEnabled = this.tightEncodingEnabled;
-					_sizePrefixDisabled = this.sizePrefixDisabled;
-				}
+				BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(type);
 
-				if(_tightEncodingEnabled)
+				if(tightEncodingEnabled)
 				{
 					BooleanStream bs = new BooleanStream();
 					size += dsm.TightMarshal1(this, c, bs);
 					size += bs.MarshalledSize();
 
-					if(!_sizePrefixDisabled)
+					if(!sizePrefixDisabled)
 					{
 						ds.Write(size);
 					}
@@ -209,7 +193,7 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 
 					// If we are prefixing then we need to first write it to memory,
 					// otherwise we can write direct to the stream.
-					if(!_sizePrefixDisabled)
+					if(!sizePrefixDisabled)
 					{
 						ms = new MemoryStream();
 						looseOut = new EndianBinaryWriter(ms);
@@ -219,7 +203,7 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 					looseOut.Write(type);
 					dsm.LooseMarshal(this, c, looseOut);
 
-					if(!_sizePrefixDisabled)
+					if(!sizePrefixDisabled)
 					{
 						ms.Position = 0;
 						looseOut.Write((int) ms.Length - 4);
@@ -247,18 +231,11 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 
 			if(dataType != NULL_TYPE)
 			{
-				BaseDataStreamMarshaller dsm;
-				bool _tightEncodingEnabled;
-
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(dataType);
-					_tightEncodingEnabled = this.tightEncodingEnabled;
-				}
+				BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(dataType);
 
 				Object data = dsm.CreateObject();
 
-				if(_tightEncodingEnabled)
+				if(tightEncodingEnabled)
 				{
 					BooleanStream bs = new BooleanStream();
 					bs.Unmarshal(dis);
@@ -271,10 +248,8 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 					return data;
 				}
 			}
-			else
-			{
-				return null;
-			}
+
+            return null;
 		}
 
 		public int TightMarshalNestedObject1(DataStructure o, BooleanStream bs)
@@ -302,11 +277,7 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 				throw new IOException("No valid data structure type for: " + o + " of type: " + o.GetType());
 			}
 
-			BaseDataStreamMarshaller dsm;
-			lock(this.marshalLock)
-			{
-				dsm = GetDataStreamMarshallerForType(type);
-			}
+			BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(type);
 
 			Tracer.Debug("Marshalling type: " + type + " with structure: " + o);
 			return 1 + dsm.TightMarshal1(this, o, bs);
@@ -330,13 +301,7 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 			}
 			else
 			{
-				BaseDataStreamMarshaller dsm;
-
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(type);
-				}
-
+				BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(type);
 				dsm.TightMarshal2(this, o, ds, bs);
 			}
 		}
@@ -345,17 +310,12 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 		{
 			if(bs.ReadBoolean())
 			{
-				DataStructure data;
-				BaseDataStreamMarshaller dsm;
-				byte dataType = dis.ReadByte();
-
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(dataType);
-				}
-
-				data = dsm.CreateObject();
-				if(data.IsMarshallAware() && bs.ReadBoolean())
+			    byte dataType = dis.ReadByte();
+                
+                BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(dataType);
+				DataStructure data = dsm.CreateObject();
+				
+                if(data.IsMarshallAware() && bs.ReadBoolean())
 				{
 					dis.ReadInt32();
 					dis.ReadByte();
@@ -363,10 +323,6 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 					BooleanStream bs2 = new BooleanStream();
 					bs2.Unmarshal(dis);
 					dsm.TightUnmarshal(this, data, dis, bs2);
-
-					// TODO: extract the sequence from the dis and associate it.
-					//                MarshallAware ma = (MarshallAware)data
-					//                ma.setCachedMarshalledForm(this, sequence);
 				}
 				else
 				{
@@ -375,10 +331,8 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 
 				return data;
 			}
-			else
-			{
-				return null;
-			}
+
+            return null;
 		}
 
 		public void LooseMarshalNestedObject(DataStructure o, BinaryWriter dataOut)
@@ -386,15 +340,10 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 			dataOut.Write(o != null);
 			if(o != null)
 			{
-				BaseDataStreamMarshaller dsm;
 				byte type = o.GetDataStructureType();
 				dataOut.Write(type);
 
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(type);
-				}
-
+                BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(type);
 				dsm.LooseMarshal(this, o, dataOut);
 			}
 		}
@@ -403,49 +352,38 @@ namespace Apache.NMS.ActiveMQ.OpenWire
 		{
 			if(dis.ReadBoolean())
 			{
-				BaseDataStreamMarshaller dsm;
-				byte dataType = dis.ReadByte();
-				DataStructure data;
-
-				lock(this.marshalLock)
-				{
-					dsm = GetDataStreamMarshallerForType(dataType);
-				}
+                byte dataType = dis.ReadByte();
 
-				data = dsm.CreateObject();
+                BaseDataStreamMarshaller dsm = GetDataStreamMarshallerForType(dataType);
+				DataStructure data = dsm.CreateObject();
 				dsm.LooseUnmarshal(this, data, dis);
 				return data;
 			}
-			else
-			{
-				return null;
-			}
+
+            return null;
 		}
 
 		public void renegotiateWireFormat(WireFormatInfo info)
 		{
-			lock(this.marshalLock)
+			if(info.Version < minimumVersion)
 			{
-				if(info.Version < minimumVersion)
-				{
-					throw new IOException("Remote wire format (" + info.Version + ") is lower than the minimum version required (" + minimumVersion + ")");
-				}
+				throw new IOException("Remote wire format (" + info.Version + ") is lower than the minimum version required (" + minimumVersion + ")");
+			}
 
-				this.Version = Math.Min(PreferredWireFormatInfo.Version, info.Version);
-				this.cacheEnabled = info.CacheEnabled && PreferredWireFormatInfo.CacheEnabled;
-				this.stackTraceEnabled = info.StackTraceEnabled && PreferredWireFormatInfo.StackTraceEnabled;
-				this.tcpNoDelayEnabled = info.TcpNoDelayEnabled && PreferredWireFormatInfo.TcpNoDelayEnabled;
-				this.sizePrefixDisabled = info.SizePrefixDisabled && PreferredWireFormatInfo.SizePrefixDisabled;
-				this.tightEncodingEnabled = info.TightEncodingEnabled && PreferredWireFormatInfo.TightEncodingEnabled;
-				this.maxInactivityDuration = info.MaxInactivityDuration;
-				this.maxInactivityDurationInitialDelay = info.MaxInactivityDurationInitialDelay;
-				this.cacheSize = info.CacheSize;
+			this.Version = Math.Min(PreferredWireFormatInfo.Version, info.Version);
+			this.cacheEnabled = info.CacheEnabled && PreferredWireFormatInfo.CacheEnabled;
+			this.stackTraceEnabled = info.StackTraceEnabled && PreferredWireFormatInfo.StackTraceEnabled;
+			this.tcpNoDelayEnabled = info.TcpNoDelayEnabled && PreferredWireFormatInfo.TcpNoDelayEnabled;
+			this.sizePrefixDisabled = info.SizePrefixDisabled && PreferredWireFormatInfo.SizePrefixDisabled;
+			this.tightEncodingEnabled = info.TightEncodingEnabled && PreferredWireFormatInfo.TightEncodingEnabled;
+			this.maxInactivityDuration = info.MaxInactivityDuration;
+			this.maxInactivityDurationInitialDelay = info.MaxInactivityDurationInitialDelay;
+			this.cacheSize = info.CacheSize;
 
-				TcpTransport tcpTransport = this.transport as TcpTransport;
-				if(null != tcpTransport)
-				{
-					tcpTransport.TcpNoDelayEnabled = this.tcpNoDelayEnabled;
-				}
+			TcpTransport tcpTransport = this.transport as TcpTransport;
+			if(null != tcpTransport)
+			{
+				tcpTransport.TcpNoDelayEnabled = this.tcpNoDelayEnabled;
 			}
 		}
 	}