From 981ac91393da6e41e5c4309c6437a478dda9096e Mon Sep 17 00:00:00 2001 From: "Huaiyu (Kitty) Liu" Date: Tue, 28 Jun 2011 14:47:56 -0700 Subject: [PATCH] Changed the writer/reader access functions to m_primsInSync in PrimSyncInfoManager. --- .../SymmetricSync/RegionSyncModule.cs | 396 ++++++++++-------- 1 file changed, 213 insertions(+), 183 deletions(-) diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs index d2c12a770a..6936db7f31 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs @@ -3367,8 +3367,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule HashSet updatedProperties = updatedPrimProperties.Value; //Sync the SOP data and cached property values in PrimSyncInfoManager again - HashSet propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(sop, new List(updatedProperties)); - updatedProperties.UnionWith(propertiesWithSyncInfoUpdated); + //HashSet propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(sop, new List(updatedProperties)); + //updatedProperties.UnionWith(propertiesWithSyncInfoUpdated); SendPrimPropertyUpdates(sop, updatedProperties); } } @@ -3943,201 +3943,204 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule public OSDMap ToOSDMap() { OSDMap propertyData = new OSDMap(); - propertyData["LastUpdateTimeStamp"] = LastUpdateTimeStamp; - propertyData["LastUpdateSyncID"] = LastUpdateSyncID; - - switch (m_property) + lock (m_syncInfoLock) { - /////////////////////////////////////// - //SOP properties with complex structure - /////////////////////////////////////// - case SceneObjectPartSyncProperties.Shape: - case SceneObjectPartSyncProperties.TaskInventory: - propertyData["Value"] = OSD.FromString((string)LastUpdateValue); - break; + propertyData["LastUpdateTimeStamp"] = LastUpdateTimeStamp; + propertyData["LastUpdateSyncID"] = LastUpdateSyncID; - //////////////////////////// - //SOP properties, enum types - //////////////////////////// - case SceneObjectPartSyncProperties.AggregateScriptEvents: - propertyData["Value"] = OSD.FromInteger((int)((scriptEvents)LastUpdateValue)); - break; - case SceneObjectPartSyncProperties.Flags: - case SceneObjectPartSyncProperties.LocalFlags: - propertyData["Value"] = OSD.FromInteger((int)((PrimFlags)LastUpdateValue)); - break; - //////////////////////////// - //SOP properties, bool types - //////////////////////////// - case SceneObjectPartSyncProperties.AllowedDrop: - case SceneObjectPartSyncProperties.IsAttachment: - case SceneObjectPartSyncProperties.PassTouches: - case SceneObjectPartSyncProperties.VolumeDetectActive: - propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); - break; + switch (m_property) + { + /////////////////////////////////////// + //SOP properties with complex structure + /////////////////////////////////////// + case SceneObjectPartSyncProperties.Shape: + case SceneObjectPartSyncProperties.TaskInventory: + propertyData["Value"] = OSD.FromString((string)LastUpdateValue); + break; - //////////////////////////// - //SOP properties, Vector3 types - //////////////////////////// - case SceneObjectPartSyncProperties.AngularVelocity: - case SceneObjectPartSyncProperties.AttachedPos: - case SceneObjectPartSyncProperties.GroupPosition: - case SceneObjectPartSyncProperties.OffsetPosition: - case SceneObjectPartSyncProperties.Scale: - case SceneObjectPartSyncProperties.SitTargetPosition: - case SceneObjectPartSyncProperties.SitTargetPositionLL: - case SceneObjectPartSyncProperties.SOP_Acceleration: - case SceneObjectPartSyncProperties.Velocity: - propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, enum types + //////////////////////////// + case SceneObjectPartSyncProperties.AggregateScriptEvents: + propertyData["Value"] = OSD.FromInteger((int)((scriptEvents)LastUpdateValue)); + break; + case SceneObjectPartSyncProperties.Flags: + case SceneObjectPartSyncProperties.LocalFlags: + propertyData["Value"] = OSD.FromInteger((int)((PrimFlags)LastUpdateValue)); + break; + //////////////////////////// + //SOP properties, bool types + //////////////////////////// + case SceneObjectPartSyncProperties.AllowedDrop: + case SceneObjectPartSyncProperties.IsAttachment: + case SceneObjectPartSyncProperties.PassTouches: + case SceneObjectPartSyncProperties.VolumeDetectActive: + propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); + break; - //////////////////////////// - //SOP properties, UUID types - //////////////////////////// - case SceneObjectPartSyncProperties.AttachedAvatar: - case SceneObjectPartSyncProperties.CollisionSound: - case SceneObjectPartSyncProperties.CreatorID: - case SceneObjectPartSyncProperties.FolderID: - case SceneObjectPartSyncProperties.GroupID: - case SceneObjectPartSyncProperties.LastOwnerID: - case SceneObjectPartSyncProperties.OwnerID: - case SceneObjectPartSyncProperties.Sound: - propertyData["Value"] = OSD.FromUUID((UUID)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, Vector3 types + //////////////////////////// + case SceneObjectPartSyncProperties.AngularVelocity: + case SceneObjectPartSyncProperties.AttachedPos: + case SceneObjectPartSyncProperties.GroupPosition: + case SceneObjectPartSyncProperties.OffsetPosition: + case SceneObjectPartSyncProperties.Scale: + case SceneObjectPartSyncProperties.SitTargetPosition: + case SceneObjectPartSyncProperties.SitTargetPositionLL: + case SceneObjectPartSyncProperties.SOP_Acceleration: + case SceneObjectPartSyncProperties.Velocity: + propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); + break; - //case SceneObjectPartProperties.AttachedPos: - //////////////////////////// - //SOP properties, uint types - //////////////////////////// - case SceneObjectPartSyncProperties.AttachmentPoint: - case SceneObjectPartSyncProperties.BaseMask: - case SceneObjectPartSyncProperties.Category: - case SceneObjectPartSyncProperties.EveryoneMask: - case SceneObjectPartSyncProperties.GroupMask: - case SceneObjectPartSyncProperties.InventorySerial: - case SceneObjectPartSyncProperties.NextOwnerMask: - case SceneObjectPartSyncProperties.OwnerMask: - propertyData["Value"] = OSD.FromUInteger((uint)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, UUID types + //////////////////////////// + case SceneObjectPartSyncProperties.AttachedAvatar: + case SceneObjectPartSyncProperties.CollisionSound: + case SceneObjectPartSyncProperties.CreatorID: + case SceneObjectPartSyncProperties.FolderID: + case SceneObjectPartSyncProperties.GroupID: + case SceneObjectPartSyncProperties.LastOwnerID: + case SceneObjectPartSyncProperties.OwnerID: + case SceneObjectPartSyncProperties.Sound: + propertyData["Value"] = OSD.FromUUID((UUID)LastUpdateValue); + break; - //case SceneObjectPartProperties.BaseMask: - //case SceneObjectPartProperties.Category: + //case SceneObjectPartProperties.AttachedPos: + //////////////////////////// + //SOP properties, uint types + //////////////////////////// + case SceneObjectPartSyncProperties.AttachmentPoint: + case SceneObjectPartSyncProperties.BaseMask: + case SceneObjectPartSyncProperties.Category: + case SceneObjectPartSyncProperties.EveryoneMask: + case SceneObjectPartSyncProperties.GroupMask: + case SceneObjectPartSyncProperties.InventorySerial: + case SceneObjectPartSyncProperties.NextOwnerMask: + case SceneObjectPartSyncProperties.OwnerMask: + propertyData["Value"] = OSD.FromUInteger((uint)LastUpdateValue); + break; - //////////////////////////// - //SOP properties, byte types - //////////////////////////// - case SceneObjectPartSyncProperties.ClickAction: - case SceneObjectPartSyncProperties.Material: - case SceneObjectPartSyncProperties.ObjectSaleType: - case SceneObjectPartSyncProperties.UpdateFlag: - propertyData["Value"] = OSD.FromInteger((byte)LastUpdateValue); - break; - //case SceneObjectPartProperties.CollisionSound: + //case SceneObjectPartProperties.BaseMask: + //case SceneObjectPartProperties.Category: - //////////////////////////// - //SOP properties, float types - //////////////////////////// - case SceneObjectPartSyncProperties.CollisionSoundVolume: - propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, byte types + //////////////////////////// + case SceneObjectPartSyncProperties.ClickAction: + case SceneObjectPartSyncProperties.Material: + case SceneObjectPartSyncProperties.ObjectSaleType: + case SceneObjectPartSyncProperties.UpdateFlag: + propertyData["Value"] = OSD.FromInteger((byte)LastUpdateValue); + break; + //case SceneObjectPartProperties.CollisionSound: - //////////////////////////// - //SOP properties, Color(struct type) - //////////////////////////// - case SceneObjectPartSyncProperties.Color: - propertyData["Value"] = OSD.FromString(PropertySerializer.SerializeColor((System.Drawing.Color)LastUpdateValue)); - break; + //////////////////////////// + //SOP properties, float types + //////////////////////////// + case SceneObjectPartSyncProperties.CollisionSoundVolume: + propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); + break; - //////////////////////////// - //SOP properties, int types - //////////////////////////// - case SceneObjectPartSyncProperties.CreationDate: - case SceneObjectPartSyncProperties.LinkNum: - case SceneObjectPartSyncProperties.OwnershipCost: - case SceneObjectPartSyncProperties.SalePrice: - case SceneObjectPartSyncProperties.ScriptAccessPin: - propertyData["Value"] = OSD.FromInteger((int)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, Color(struct type) + //////////////////////////// + case SceneObjectPartSyncProperties.Color: + propertyData["Value"] = OSD.FromString(PropertySerializer.SerializeColor((System.Drawing.Color)LastUpdateValue)); + break; - //////////////////////////// - //SOP properties, string types - //////////////////////////// - case SceneObjectPartSyncProperties.CreatorData: - case SceneObjectPartSyncProperties.Description: - case SceneObjectPartSyncProperties.MediaUrl: - case SceneObjectPartSyncProperties.Name: - case SceneObjectPartSyncProperties.SitName: - case SceneObjectPartSyncProperties.Text: - case SceneObjectPartSyncProperties.TouchName: - propertyData["Value"] = OSD.FromString((string)LastUpdateValue); - break; - //////////////////////////// - //SOP properties, byte[] types - //////////////////////////// - case SceneObjectPartSyncProperties.ParticleSystem: - case SceneObjectPartSyncProperties.TextureAnimation: - propertyData["Value"] = OSD.FromBinary((byte[])LastUpdateValue); - break; + //////////////////////////// + //SOP properties, int types + //////////////////////////// + case SceneObjectPartSyncProperties.CreationDate: + case SceneObjectPartSyncProperties.LinkNum: + case SceneObjectPartSyncProperties.OwnershipCost: + case SceneObjectPartSyncProperties.SalePrice: + case SceneObjectPartSyncProperties.ScriptAccessPin: + propertyData["Value"] = OSD.FromInteger((int)LastUpdateValue); + break; - //////////////////////////// - //SOP properties, Quaternion types - //////////////////////////// - case SceneObjectPartSyncProperties.RotationOffset: - case SceneObjectPartSyncProperties.SitTargetOrientation: - case SceneObjectPartSyncProperties.SitTargetOrientationLL: - propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, string types + //////////////////////////// + case SceneObjectPartSyncProperties.CreatorData: + case SceneObjectPartSyncProperties.Description: + case SceneObjectPartSyncProperties.MediaUrl: + case SceneObjectPartSyncProperties.Name: + case SceneObjectPartSyncProperties.SitName: + case SceneObjectPartSyncProperties.Text: + case SceneObjectPartSyncProperties.TouchName: + propertyData["Value"] = OSD.FromString((string)LastUpdateValue); + break; + //////////////////////////// + //SOP properties, byte[] types + //////////////////////////// + case SceneObjectPartSyncProperties.ParticleSystem: + case SceneObjectPartSyncProperties.TextureAnimation: + propertyData["Value"] = OSD.FromBinary((byte[])LastUpdateValue); + break; - //////////////////////////////////// - //PhysActor properties, float type - //////////////////////////////////// - case SceneObjectPartSyncProperties.Buoyancy: - propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); - break; + //////////////////////////// + //SOP properties, Quaternion types + //////////////////////////// + case SceneObjectPartSyncProperties.RotationOffset: + case SceneObjectPartSyncProperties.SitTargetOrientation: + case SceneObjectPartSyncProperties.SitTargetOrientationLL: + propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); + break; - //////////////////////////////////// - //PhysActor properties, bool type - //////////////////////////////////// - case SceneObjectPartSyncProperties.Flying: - case SceneObjectPartSyncProperties.IsColliding: - case SceneObjectPartSyncProperties.CollidingGround: - case SceneObjectPartSyncProperties.IsPhysical: - case SceneObjectPartSyncProperties.Kinematic: - propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); - break; + //////////////////////////////////// + //PhysActor properties, float type + //////////////////////////////////// + case SceneObjectPartSyncProperties.Buoyancy: + propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); + break; - //////////////////////////////////// - //PhysActor properties, Vector3 type - //////////////////////////////////// - case SceneObjectPartSyncProperties.Force: - case SceneObjectPartSyncProperties.PA_Acceleration: - case SceneObjectPartSyncProperties.Position: - case SceneObjectPartSyncProperties.RotationalVelocity: - case SceneObjectPartSyncProperties.Size: - case SceneObjectPartSyncProperties.Torque: - propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); - break; + //////////////////////////////////// + //PhysActor properties, bool type + //////////////////////////////////// + case SceneObjectPartSyncProperties.Flying: + case SceneObjectPartSyncProperties.IsColliding: + case SceneObjectPartSyncProperties.CollidingGround: + case SceneObjectPartSyncProperties.IsPhysical: + case SceneObjectPartSyncProperties.Kinematic: + propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); + break; - //////////////////////////////////// - //PhysActor properties, Quaternion type - //////////////////////////////////// - case SceneObjectPartSyncProperties.Orientation: - propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); - break; + //////////////////////////////////// + //PhysActor properties, Vector3 type + //////////////////////////////////// + case SceneObjectPartSyncProperties.Force: + case SceneObjectPartSyncProperties.PA_Acceleration: + case SceneObjectPartSyncProperties.Position: + case SceneObjectPartSyncProperties.RotationalVelocity: + case SceneObjectPartSyncProperties.Size: + case SceneObjectPartSyncProperties.Torque: + propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); + break; - /////////////////////// - //SOG properties - /////////////////////// - case SceneObjectPartSyncProperties.AbsolutePosition: - propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); - break; - case SceneObjectPartSyncProperties.IsSelected: - propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); - break; + //////////////////////////////////// + //PhysActor properties, Quaternion type + //////////////////////////////////// + case SceneObjectPartSyncProperties.Orientation: + propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); + break; - default: - DebugLog.WarnFormat("PrimSynInfo.PropertyToOSD -- no handler for property {0} ", m_property); - break; + /////////////////////// + //SOG properties + /////////////////////// + case SceneObjectPartSyncProperties.AbsolutePosition: + propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); + break; + case SceneObjectPartSyncProperties.IsSelected: + propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue); + break; + + default: + DebugLog.WarnFormat("PrimSynInfo.PropertyToOSD -- no handler for property {0} ", m_property); + break; + } } return propertyData; } @@ -7077,18 +7080,23 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule { lock (m_primsInSyncLock) { + if (m_primsInSync.ContainsKey(primUUID)) { m_primsInSync[primUUID] = primSyncInfo; return false; } + /* //copy the items from the old list and insert the new record Dictionary newPrimsInSync = new Dictionary(m_primsInSync); newPrimsInSync.Add(primUUID, primSyncInfo); //replace the old list m_primsInSync = newPrimsInSync; + * */ + + m_primsInSync.Add(primUUID, primSyncInfo); } return true; } @@ -7113,10 +7121,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule m_primsInSync[part.UUID] = primSyncInfo; return false; } + /* Dictionary newPrimsInSync = new Dictionary(m_primsInSync); newPrimsInSync.Add(part.UUID, primSyncInfo); m_primsInSync = newPrimsInSync; + * */ + m_primsInSync.Add(part.UUID, primSyncInfo); } return true; } @@ -7126,6 +7137,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule lock (m_primsInSyncLock) { //copy the old list, update the copied list + /* Dictionary newPrimsInSync = new Dictionary(m_primsInSync); foreach (KeyValuePair valPair in multiPrimsSyncInfo) { @@ -7141,6 +7153,19 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule //replace the old list m_primsInSync = newPrimsInSync; + * */ + + foreach (KeyValuePair valPair in multiPrimsSyncInfo) + { + UUID primUUID = valPair.Key; + PrimSyncInfo primSyncInfo = valPair.Value; + if (m_primsInSync.ContainsKey(primUUID)) + { + m_primsInSync[primUUID] = primSyncInfo; + continue; + } + m_primsInSync.Add(primUUID, primSyncInfo); + } } } @@ -7152,22 +7177,27 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule } lock (m_primsInSyncLock) { + /* Dictionary newPrimsInSync = new Dictionary(m_primsInSync); newPrimsInSync.Remove(part.UUID); m_primsInSync = newPrimsInSync; + * */ + m_primsInSync.Remove(part.UUID); } return true; } public PrimSyncInfo GetPrimSyncInfo(UUID primUUID) { - if (m_primsInSync.ContainsKey(primUUID)) + lock (m_primsInSyncLock) { - return m_primsInSync[primUUID]; + if (m_primsInSync.ContainsKey(primUUID)) + { + return m_primsInSync[primUUID]; + } } - else - return null; + return null; } public bool SetSOPPhyscActorProperties(SceneObjectPart part)