From 4acd23f0f90e56eecd4af3acd6b77e9d0951ac52 Mon Sep 17 00:00:00 2001 From: "Huaiyu (Kitty) Liu" Date: Tue, 3 May 2011 14:25:05 -0700 Subject: [PATCH] In SyncOutPrimUpdates(), calling UpdatePrimSyncInfoByLocal again before calling SendPrimPropertyUpdates, to make sure local updates are sync'ed into RegionSyncModule's cache. --- .../SymmetricSync/RegionSyncModule.cs | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs index e0b23184aa..8385e09641 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs @@ -3684,12 +3684,18 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule foreach (KeyValuePair> updatedPrimProperties in primPropertyUpdates) { UUID primUUID = updatedPrimProperties.Key; - HashSet updatedProperties = updatedPrimProperties.Value; + SceneObjectPart sop = m_scene.GetSceneObjectPart(primUUID); - //Sync the SOP data and cached property values in PrimSyncInfoManager again - //HashSet propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(part, updatedProperties); + if (sop == null || sop.ParentGroup.IsDeleted) + continue; + else + { + HashSet updatedProperties = updatedPrimProperties.Value; - SendPrimPropertyUpdates(primUUID, updatedProperties); + //Sync the SOP data and cached property values in PrimSyncInfoManager again + HashSet propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(sop, new List(updatedProperties)); + SendPrimPropertyUpdates(sop, updatedProperties); + } } // Indicate that the current batch of updates has been completed @@ -3702,13 +3708,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule } } - private void SendPrimPropertyUpdates(UUID primUUID, HashSet updatedProperties) + private void SendPrimPropertyUpdates(SceneObjectPart sop, HashSet updatedProperties) { - SceneObjectPart sop = m_scene.GetSceneObjectPart(primUUID); - - if (sop == null || sop.ParentGroup.IsDeleted) - return; - OSDMap syncData = m_primSyncInfoManager.EncodePrimProperties(sop, updatedProperties); if (syncData.Count > 0) @@ -3741,7 +3742,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedPrimProperties, OSDParser.SerializeJsonString(syncData)); - SendPrimUpdateToRelevantSyncConnectors(primUUID, syncMsg); + SendPrimUpdateToRelevantSyncConnectors(sop.UUID, syncMsg); } }