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;
}
}
}