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;