From dc84f350a763b3c5ba5a5b8ad173fde3867f24f4 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Fri, 14 Mar 2008 16:28:33 +0000 Subject: [PATCH] * As yet incomplete fix for mantis #766 - terse updates broken * Currently, terse updates are back, and extremely rapid linking and delinking will only break occasionally * More work to do here --- .../Region/Environment/Scenes/SceneObjectGroup.cs | 8 +++++++- OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | 12 +++++++++++- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 10 +++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index e295f87ed3..4c699308f7 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -947,6 +947,9 @@ namespace OpenSim.Region.Environment.Scenes /// The group of prims which should be linked to this group public void LinkToGroup(SceneObjectGroup objectGroup) { + if (objectGroup.RootPart.UpdateFlag > 0) + return; + SceneObjectPart linkPart = objectGroup.m_rootPart; Vector3 oldGroupPosition = @@ -1014,10 +1017,13 @@ namespace OpenSim.Region.Environment.Scenes /// public void DelinkFromGroup(uint partID) { + if (RootPart.UpdateFlag > 0) + return; + SceneObjectPart linkPart = GetChildPart(partID); if (null != linkPart) - { + { LLQuaternion worldRot = linkPart.GetWorldRotation(); // Remove the part from this object diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 060003e8f6..4fc688aa8f 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -1114,7 +1114,17 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.QueueForUpdateCheck(); } - TimeStampFull = (uint) Util.UnixTimeSinceEpoch(); + int timeNow = Util.UnixTimeSinceEpoch(); + + if (timeNow == TimeStampFull) + { + TimeStampFull += 1; + } + else + { + TimeStampFull = (uint)timeNow; + } + m_updateFlag = 2; } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index fb0e836a40..44d2316f2d 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -479,8 +479,12 @@ namespace OpenSim.Region.Environment.Scenes // // If we don't do this, various events (such as linking and delinking in the same // second), will stop working properly! - if (update.LastFullUpdateTime <= part.TimeStampFull) + if (update.LastFullUpdateTime < part.TimeStampFull) { +// m_log.DebugFormat( +// "[SCENE PRESENCE]: Fully updating prim {0}, {1} - part timestamp {2}", +// part.Name, part.UUID, part.TimeStampFull); + //need to do a full update part.SendFullUpdate(ControllingClient, GenerateClientFlags(part.UUID)); @@ -494,6 +498,10 @@ namespace OpenSim.Region.Environment.Scenes } else if (update.LastTerseUpdateTime <= part.TimeStampTerse) { +// m_log.DebugFormat( +// "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", +// part.Name, part.UUID, part.TimeStampTerse); + part.SendTerseUpdate(ControllingClient); update.LastTerseUpdateTime = part.TimeStampTerse;