Fixed bug(s) in CompareAndUpdateSOPGroupPosition and CompareAndUpdateSOPPosition

that may cause script engine to crash.
dsg
Huaiyu (Kitty) Liu 2011-06-02 16:37:01 -07:00
parent fdb4e92dc3
commit fa892e4afb
1 changed files with 60 additions and 19 deletions

View File

@ -5898,12 +5898,20 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//Also may need to cached PhysActor.Position //Also may need to cached PhysActor.Position
if (part.PhysActor != null) if (part.PhysActor != null)
{
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.Position))
{
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.Position);
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.Position, initValue, lastUpdateByLocalTS, syncID);
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
}
else
{ {
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue)) if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
{ {
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position); m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position);
} }
}
} }
return true; return true;
} }
@ -5915,18 +5923,31 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//PhysActor.Position is just updated by setting GroupPosition //PhysActor.Position is just updated by setting GroupPosition
//above, so need to update the cached value of Position here. //above, so need to update the cached value of Position here.
if (part.PhysActor != null) if (part.PhysActor != null)
{
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
{ {
//Set the timestamp and syncID to be the same with GroupPosition //Set the timestamp and syncID to be the same with GroupPosition
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateTimeStamp; long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateTimeStamp;
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateSyncID; string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateSyncID;
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.Position))
{
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.Position);
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.Position, initValue, lastUpdateTimestamp, lastUpdateSyncID);
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
}
else
{
if (!part.PhysActor.Position.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateValue))
{
//Set the timestamp and syncID to be the same with GroupPosition
//long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateTimeStamp;
//string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateSyncID;
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateTimestamp, m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateTimestamp,
lastUpdateSyncID, (Object)part.PhysActor.Position); lastUpdateSyncID, (Object)part.PhysActor.Position);
} }
} }
} }
} }
}
return false; return false;
} }
@ -5943,11 +5964,20 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position); m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.PhysActor.Position);
//Also may need to update SOP.GroupPosition (especially for root parts) //Also may need to update SOP.GroupPosition (especially for root parts)
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.GroupPosition))
{
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.GroupPosition);
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.GroupPosition, initValue, lastUpdateByLocalTS, syncID);
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
}
else
{
if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue)) if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue))
{ {
//Update SOP.GroupPosition //Update SOP.GroupPosition
m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.GroupPosition); m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.GroupPosition);
} }
}
return true; return true;
} }
else if (lastUpdateByLocalTS < m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp) else if (lastUpdateByLocalTS < m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp)
@ -5957,17 +5987,28 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//GroupPosition may change due to PhysActor.Position changes, //GroupPosition may change due to PhysActor.Position changes,
//especially for root parts. Sync the value of GroupPosition. //especially for root parts. Sync the value of GroupPosition.
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp;
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID;
if (!m_propertiesSyncInfo.ContainsKey(SceneObjectPartSyncProperties.GroupPosition))
{
Object initValue = GetSOPPropertyValue(part, SceneObjectPartSyncProperties.GroupPosition);
PropertySyncInfo syncInfo = new PropertySyncInfo(SceneObjectPartSyncProperties.GroupPosition, initValue, lastUpdateTimestamp, lastUpdateSyncID);
m_propertiesSyncInfo.Add(SceneObjectPartSyncProperties.Position, syncInfo);
}
else
{
if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue)) if (!part.GroupPosition.Equals(m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].LastUpdateValue))
{ {
//Need to reset SOP.GroupPosition to the cached value here //Need to reset SOP.GroupPosition to the cached value here
//Set the timestamp and syncID to be the same with Position //Set the timestamp and syncID to be the same with Position
long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp; //long lastUpdateTimestamp = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateTimeStamp;
string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID; //string lastUpdateSyncID = m_propertiesSyncInfo[SceneObjectPartSyncProperties.Position].LastUpdateSyncID;
m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateTimestamp, m_propertiesSyncInfo[SceneObjectPartSyncProperties.GroupPosition].UpdateSyncInfoByLocal(lastUpdateTimestamp,
lastUpdateSyncID, (Object)part.GroupPosition); lastUpdateSyncID, (Object)part.GroupPosition);
} }
} }
} }
}
return false; return false;
} }
} }