aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-05-27 21:35:17 +0100
committerJustin Clark-Casey (justincc)2010-06-07 19:14:22 +0100
commit50ddb20204e8eb513212fe80d80b1308280fd47f (patch)
treef58c4ccd06a5f57985869f4679e3b208f59db912 /OpenSim
parentRevert "commit code which stops full updates being fired multiple times when ... (diff)
downloadopensim-SC-50ddb20204e8eb513212fe80d80b1308280fd47f.zip
opensim-SC-50ddb20204e8eb513212fe80d80b1308280fd47f.tar.gz
opensim-SC-50ddb20204e8eb513212fe80d80b1308280fd47f.tar.bz2
opensim-SC-50ddb20204e8eb513212fe80d80b1308280fd47f.tar.xz
commit code which stops full updates being fired multiple times when attachments cross standalone region boundaries
lots of messy debug code here too which would need to be removed
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs43
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs34
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs15
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs34
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneViewer.cs8
9 files changed, 122 insertions, 22 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
index d68c683..4abc215 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
@@ -260,7 +260,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
260 { 260 {
261 if (s.RegionInfo.RegionHandle == regionHandle) 261 if (s.RegionInfo.RegionHandle == regionHandle)
262 { 262 {
263 //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject"); 263 m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject");
264 if (isLocalCall) 264 if (isLocalCall)
265 { 265 {
266 // We need to make a local copy of the object 266 // We need to make a local copy of the object
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index a2634f7..f556b35 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2449,6 +2449,8 @@ namespace OpenSim.Region.Framework.Scenes
2449 return; 2449 return;
2450 } 2450 }
2451 2451
2452 m_log.DebugFormat("[SCENE INVENTORY]: {0} {1} IsAttachment={2}", att.Name, att.LocalId, att.IsAttachment);
2453 Console.WriteLine("HERE X");
2452 ScenePresence presence; 2454 ScenePresence presence;
2453 if (TryGetAvatar(remoteClient.AgentId, out presence)) 2455 if (TryGetAvatar(remoteClient.AgentId, out presence))
2454 { 2456 {
@@ -2456,9 +2458,12 @@ namespace OpenSim.Region.Framework.Scenes
2456 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); 2458 InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
2457 item = InventoryService.GetItem(item); 2459 item = InventoryService.GetItem(item);
2458 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); 2460 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
2461 Console.WriteLine("HERE Y");
2459 2462
2460 if (m_AvatarFactory != null) 2463 if (m_AvatarFactory != null)
2461 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); 2464 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
2465
2466 Console.WriteLine("HERE Z");
2462 } 2467 }
2463 } 2468 }
2464 2469
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index ac04dc7..d8e604f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -124,6 +124,7 @@ namespace OpenSim.Region.Framework.Scenes
124 { 124 {
125 if (((SceneObjectGroup)ent).LocalId == primLocalID) 125 if (((SceneObjectGroup)ent).LocalId == primLocalID)
126 { 126 {
127 m_log.DebugFormat("[SCENE]: Received full update request for {0} from {1}", primLocalID, remoteClient.Name);
127 ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient); 128 ((SceneObjectGroup)ent).SendFullUpdateToClient(remoteClient);
128 return; 129 return;
129 } 130 }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e8c4978..f8ca047 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1850,9 +1850,31 @@ namespace OpenSim.Region.Framework.Scenes
1850 /// true if the object was added, false if an object with the same uuid was already in the scene 1850 /// true if the object was added, false if an object with the same uuid was already in the scene
1851 /// </returns> 1851 /// </returns>
1852 public bool AddRestoredSceneObject( 1852 public bool AddRestoredSceneObject(
1853 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates)
1854 {
1855 return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, sendClientUpdates);
1856 }
1857
1858 /// <summary>
1859 /// Add an object into the scene that has come from storage
1860 /// </summary>
1861 ///
1862 /// <param name="sceneObject"></param>
1863 /// <param name="attachToBackup">
1864 /// If true, changes to the object will be reflected in its persisted data
1865 /// If false, the persisted data will not be changed even if the object in the scene is changed
1866 /// </param>
1867 /// <param name="alreadyPersisted">
1868 /// If true, we won't persist this object until it changes
1869 /// If false, we'll persist this object immediately
1870 /// </param>
1871 /// <returns>
1872 /// true if the object was added, false if an object with the same uuid was already in the scene
1873 /// </returns>
1874 public bool AddRestoredSceneObject(
1853 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) 1875 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
1854 { 1876 {
1855 return m_sceneGraph.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted); 1877 return AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true);
1856 } 1878 }
1857 1879
1858 /// <summary> 1880 /// <summary>
@@ -2465,7 +2487,7 @@ namespace OpenSim.Region.Framework.Scenes
2465 /// <returns></returns> 2487 /// <returns></returns>
2466 public bool IncomingCreateObject(ISceneObject sog) 2488 public bool IncomingCreateObject(ISceneObject sog)
2467 { 2489 {
2468 //m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted); 2490 m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted);
2469 SceneObjectGroup newObject; 2491 SceneObjectGroup newObject;
2470 try 2492 try
2471 { 2493 {
@@ -2537,10 +2559,12 @@ namespace OpenSim.Region.Framework.Scenes
2537 2559
2538 if (sceneObject.IsAttachmentCheckFull()) // Attachment 2560 if (sceneObject.IsAttachmentCheckFull()) // Attachment
2539 { 2561 {
2562 m_log.DebugFormat("[SCENE]: Adding attachment {0} {1}", sceneObject.Name, sceneObject.LocalId);
2563
2540 sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez); 2564 sceneObject.RootPart.AddFlag(PrimFlags.TemporaryOnRez);
2541 sceneObject.RootPart.AddFlag(PrimFlags.Phantom); 2565 sceneObject.RootPart.AddFlag(PrimFlags.Phantom);
2542 2566
2543 AddRestoredSceneObject(sceneObject, false, false); 2567 AddRestoredSceneObject(sceneObject, false, false, false);
2544 2568
2545 // Handle attachment special case 2569 // Handle attachment special case
2546 SceneObjectPart RootPrim = sceneObject.RootPart; 2570 SceneObjectPart RootPrim = sceneObject.RootPart;
@@ -2548,6 +2572,8 @@ namespace OpenSim.Region.Framework.Scenes
2548 // Fix up attachment Parent Local ID 2572 // Fix up attachment Parent Local ID
2549 ScenePresence sp = GetScenePresence(sceneObject.OwnerID); 2573 ScenePresence sp = GetScenePresence(sceneObject.OwnerID);
2550 2574
2575 Console.WriteLine("AAAA");
2576
2551 //uint parentLocalID = 0; 2577 //uint parentLocalID = 0;
2552 if (sp != null) 2578 if (sp != null)
2553 { 2579 {
@@ -2566,20 +2592,25 @@ namespace OpenSim.Region.Framework.Scenes
2566 //grp.SetFromAssetID(grp.RootPart.LastOwnerID); 2592 //grp.SetFromAssetID(grp.RootPart.LastOwnerID);
2567 m_log.DebugFormat( 2593 m_log.DebugFormat(
2568 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); 2594 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition);
2569 2595
2596 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2570 AttachObject( 2597 AttachObject(
2571 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); 2598 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false);
2572 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2599
2573 grp.SendGroupFullUpdate(); 2600 //grp.SendGroupFullUpdate();
2574 } 2601 }
2575 else 2602 else
2576 { 2603 {
2577 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2604 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2578 RootPrim.AddFlag(PrimFlags.TemporaryOnRez); 2605 RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
2579 } 2606 }
2607
2608 Console.WriteLine("BBBB");
2580 } 2609 }
2581 else 2610 else
2582 { 2611 {
2612 m_log.DebugFormat("[SCENE]: Adding ordinary object {0} {1}", sceneObject.Name, sceneObject.LocalId);
2613
2583 AddRestoredSceneObject(sceneObject, true, false); 2614 AddRestoredSceneObject(sceneObject, true, false);
2584 2615
2585 if (!Permissions.CanObjectEntry(sceneObject.UUID, 2616 if (!Permissions.CanObjectEntry(sceneObject.UUID,
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 2f6a0db..50feb17 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -1383,7 +1383,9 @@ namespace OpenSim.Region.Framework.Scenes
1383 // now we have a child agent in this region. Request all interesting data about other (root) agents 1383 // now we have a child agent in this region. Request all interesting data about other (root) agents
1384 agent.SendInitialFullUpdateToAllClients(); 1384 agent.SendInitialFullUpdateToAllClients();
1385 1385
1386 Console.WriteLine("SCS 1");
1386 agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true); 1387 agent.CrossAttachmentsIntoNewRegion(neighbourHandle, true);
1388 Console.WriteLine("SCS 2");
1387 1389
1388 // m_scene.SendKillObject(m_localId); 1390 // m_scene.SendKillObject(m_localId);
1389 1391
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 59a2f41..fa3c5eb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -216,11 +216,15 @@ namespace OpenSim.Region.Framework.Scenes
216 /// If true, we won't persist this object until it changes 216 /// If true, we won't persist this object until it changes
217 /// If false, we'll persist this object immediately 217 /// If false, we'll persist this object immediately
218 /// </param> 218 /// </param>
219 /// <param name="sendClientUpdate">
220 /// If true, we send updates to the client to tell it about this object
221 /// If false, we leave it up to the caller to do this
222 /// </param>
219 /// <returns> 223 /// <returns>
220 /// true if the object was added, false if an object with the same uuid was already in the scene 224 /// true if the object was added, false if an object with the same uuid was already in the scene
221 /// </returns> 225 /// </returns>
222 protected internal bool AddRestoredSceneObject( 226 protected internal bool AddRestoredSceneObject(
223 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) 227 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates)
224 { 228 {
225 if (!alreadyPersisted) 229 if (!alreadyPersisted)
226 { 230 {
@@ -228,8 +232,29 @@ namespace OpenSim.Region.Framework.Scenes
228 sceneObject.HasGroupChanged = true; 232 sceneObject.HasGroupChanged = true;
229 } 233 }
230 234
231 return AddSceneObject(sceneObject, attachToBackup, true); 235 return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
232 } 236 }
237
238// /// <summary>
239// /// Add an object into the scene that has come from storage
240// /// </summary>
241// /// <param name="sceneObject"></param>
242// /// <param name="attachToBackup">
243// /// If true, changes to the object will be reflected in its persisted data
244// /// If false, the persisted data will not be changed even if the object in the scene is changed
245// /// </param>
246// /// <param name="alreadyPersisted">
247// /// If true, we won't persist this object until it changes
248// /// If false, we'll persist this object immediately
249// /// </param>
250// /// <returns>
251// /// true if the object was added, false if an object with the same uuid was already in the scene
252// /// </returns>
253// protected internal bool AddRestoredSceneObject(
254// SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
255// {
256// AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted, true);
257// }
233 258
234 /// <summary> 259 /// <summary>
235 /// Add a newly created object to the scene. This will both update the scene, and send information about the 260 /// Add a newly created object to the scene. This will both update the scene, and send information about the
@@ -611,11 +636,13 @@ namespace OpenSim.Region.Framework.Scenes
611 protected internal bool AttachObject( 636 protected internal bool AttachObject(
612 IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) 637 IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent)
613 { 638 {
639 Console.WriteLine("HERE A");
614 SceneObjectGroup group = GetGroupByPrim(objectLocalID); 640 SceneObjectGroup group = GetGroupByPrim(objectLocalID);
615 if (group != null) 641 if (group != null)
616 { 642 {
617 if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) 643 if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId))
618 { 644 {
645 Console.WriteLine("HERE -1");
619 // If the attachment point isn't the same as the one previously used 646 // If the attachment point isn't the same as the one previously used
620 // set it's offset position = 0 so that it appears on the attachment point 647 // set it's offset position = 0 so that it appears on the attachment point
621 // and not in a weird location somewhere unknown. 648 // and not in a weird location somewhere unknown.
@@ -654,9 +681,12 @@ namespace OpenSim.Region.Framework.Scenes
654 itemId = group.GetFromItemID(); 681 itemId = group.GetFromItemID();
655 } 682 }
656 683
684 Console.WriteLine("HERE 0");
657 m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); 685 m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group);
658 686
687 Console.WriteLine("HERE 1");
659 group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); 688 group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent);
689 Console.WriteLine("HERE 2");
660 // In case it is later dropped again, don't let 690 // In case it is later dropped again, don't let
661 // it get cleaned up 691 // it get cleaned up
662 // 692 //
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 602b811..ba3fde7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1494,6 +1494,10 @@ namespace OpenSim.Region.Framework.Scenes
1494 1494
1495 public void SendFullUpdateToClient(IClientAPI remoteClient) 1495 public void SendFullUpdateToClient(IClientAPI remoteClient)
1496 { 1496 {
1497 if (IsAttachment)
1498 m_log.DebugFormat(
1499 "[SOG]: Sending full update to client {0} for {1} {2}", remoteClient.Name, Name, LocalId);
1500
1497 SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID)); 1501 SendPartFullUpdate(remoteClient, RootPart, m_scene.Permissions.GenerateClientFlags(remoteClient.AgentId, RootPart.UUID));
1498 1502
1499 lock (m_parts) 1503 lock (m_parts)
@@ -1513,8 +1517,9 @@ namespace OpenSim.Region.Framework.Scenes
1513 /// <param name="part"></param> 1517 /// <param name="part"></param>
1514 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags) 1518 internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags)
1515 { 1519 {
1516// m_log.DebugFormat( 1520 if (IsAttachment)
1517// "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); 1521 m_log.DebugFormat(
1522 "[SOG]: Sending part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId);
1518 1523
1519 if (m_rootPart.UUID == part.UUID) 1524 if (m_rootPart.UUID == part.UUID)
1520 { 1525 {
@@ -1994,7 +1999,8 @@ namespace OpenSim.Region.Framework.Scenes
1994 1999
1995 public void ScheduleFullUpdateToAvatar(ScenePresence presence) 2000 public void ScheduleFullUpdateToAvatar(ScenePresence presence)
1996 { 2001 {
1997// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name); 2002 if (IsAttachment)
2003 m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name);
1998 2004
1999 RootPart.AddFullUpdateToAvatar(presence); 2005 RootPart.AddFullUpdateToAvatar(presence);
2000 2006
@@ -2026,7 +2032,8 @@ namespace OpenSim.Region.Framework.Scenes
2026 /// </summary> 2032 /// </summary>
2027 public void ScheduleGroupForFullUpdate() 2033 public void ScheduleGroupForFullUpdate()
2028 { 2034 {
2029// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID); 2035 if (IsAttachment)
2036 m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID);
2030 2037
2031 checkAtTargets(); 2038 checkAtTargets();
2032 RootPart.ScheduleFullUpdate(); 2039 RootPart.ScheduleFullUpdate();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a85a4b3..ffbb427 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1259,16 +1259,17 @@ namespace OpenSim.Region.Framework.Scenes
1259 /// Tell all scene presences that they should send updates for this part to their clients 1259 /// Tell all scene presences that they should send updates for this part to their clients
1260 /// </summary> 1260 /// </summary>
1261 public void AddFullUpdateToAllAvatars() 1261 public void AddFullUpdateToAllAvatars()
1262 { 1262 {
1263 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 1263 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
1264 for (int i = 0; i < avatars.Length; i++) 1264 for (int i = 0; i < avatars.Length; i++)
1265 { 1265 AddFullUpdateToAvatar(avatars[i]);
1266 avatars[i].SceneViewer.QueuePartForUpdate(this);
1267 }
1268 } 1266 }
1269 1267
1270 public void AddFullUpdateToAvatar(ScenePresence presence) 1268 public void AddFullUpdateToAvatar(ScenePresence presence)
1271 { 1269 {
1270 if (IsAttachment)
1271 m_log.DebugFormat("AddFullUpdateToAllAvatar() {0} for {1} {2}", presence.Name, Name, LocalId);
1272
1272 presence.SceneViewer.QueuePartForUpdate(this); 1273 presence.SceneViewer.QueuePartForUpdate(this);
1273 } 1274 }
1274 1275
@@ -1287,13 +1288,14 @@ namespace OpenSim.Region.Framework.Scenes
1287 { 1288 {
1288 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 1289 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
1289 for (int i = 0; i < avatars.Length; i++) 1290 for (int i = 0; i < avatars.Length; i++)
1290 { 1291 AddTerseUpdateToAvatar(avatars[i]);
1291 avatars[i].SceneViewer.QueuePartForUpdate(this);
1292 }
1293 } 1292 }
1294 1293
1295 public void AddTerseUpdateToAvatar(ScenePresence presence) 1294 public void AddTerseUpdateToAvatar(ScenePresence presence)
1296 { 1295 {
1296 if (IsAttachment)
1297 m_log.DebugFormat("AddTerseUpdateToAvatar() {0} for {1} {2}", presence.Name, Name, LocalId);
1298
1297 presence.SceneViewer.QueuePartForUpdate(this); 1299 presence.SceneViewer.QueuePartForUpdate(this);
1298 } 1300 }
1299 1301
@@ -2727,7 +2729,8 @@ namespace OpenSim.Region.Framework.Scenes
2727 /// </summary> 2729 /// </summary>
2728 public void ScheduleFullUpdate() 2730 public void ScheduleFullUpdate()
2729 { 2731 {
2730// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); 2732 if (IsAttachment)
2733 m_log.DebugFormat("[SOP]: Scheduling full update for {0} {1}", Name, LocalId);
2731 2734
2732 if (m_parentGroup != null) 2735 if (m_parentGroup != null)
2733 { 2736 {
@@ -2840,6 +2843,10 @@ namespace OpenSim.Region.Framework.Scenes
2840 /// <param name="remoteClient"></param> 2843 /// <param name="remoteClient"></param>
2841 public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) 2844 public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags)
2842 { 2845 {
2846 if (IsAttachment)
2847 m_log.DebugFormat(
2848 "[SCENE OBJECT PART]: Sending part full update to {0} for {1} {2}", remoteClient.Name, Name, LocalId);
2849
2843 m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); 2850 m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags);
2844 } 2851 }
2845 2852
@@ -2848,6 +2855,10 @@ namespace OpenSim.Region.Framework.Scenes
2848 /// </summary> 2855 /// </summary>
2849 public void SendFullUpdateToAllClients() 2856 public void SendFullUpdateToAllClients()
2850 { 2857 {
2858 if (IsAttachment)
2859 m_log.DebugFormat(
2860 "[SCENE OBJECT PART]: Sending full update for {0} {1} for all clients", Name, LocalId);
2861
2851 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 2862 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
2852 for (int i = 0; i < avatars.Length; i++) 2863 for (int i = 0; i < avatars.Length; i++)
2853 { 2864 {
@@ -2859,6 +2870,10 @@ namespace OpenSim.Region.Framework.Scenes
2859 2870
2860 public void SendFullUpdateToAllClientsExcept(UUID agentID) 2871 public void SendFullUpdateToAllClientsExcept(UUID agentID)
2861 { 2872 {
2873 if (IsAttachment)
2874 m_log.DebugFormat(
2875 "[SCENE OBJECT PART]: Sending full update for {0} {1} to all clients except {2}", Name, LocalId, agentID);
2876
2862 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); 2877 ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences();
2863 for (int i = 0; i < avatars.Length; i++) 2878 for (int i = 0; i < avatars.Length; i++)
2864 { 2879 {
@@ -2965,6 +2980,9 @@ namespace OpenSim.Region.Framework.Scenes
2965 { 2980 {
2966 if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes 2981 if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes
2967 { 2982 {
2983 if (IsAttachment)
2984 m_log.DebugFormat("[SOP]: Sending scheduled full update for {0} {1}", Name, LocalId);
2985
2968 AddFullUpdateToAllAvatars(); 2986 AddFullUpdateToAllAvatars();
2969 ClearUpdateSchedule(); 2987 ClearUpdateSchedule();
2970 } 2988 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
index e4296ef..6f2bef9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Reflection;
30using OpenMetaverse; 31using OpenMetaverse;
31using log4net; 32using log4net;
32using OpenSim.Framework; 33using OpenSim.Framework;
@@ -39,6 +40,8 @@ namespace OpenSim.Region.Framework.Scenes
39{ 40{
40 public class SceneViewer : ISceneViewer 41 public class SceneViewer : ISceneViewer
41 { 42 {
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
42 protected ScenePresence m_presence; 45 protected ScenePresence m_presence;
43 protected UpdateQueue m_partsUpdateQueue = new UpdateQueue(); 46 protected UpdateQueue m_partsUpdateQueue = new UpdateQueue();
44 protected Queue<SceneObjectGroup> m_pendingObjects; 47 protected Queue<SceneObjectGroup> m_pendingObjects;
@@ -60,6 +63,9 @@ namespace OpenSim.Region.Framework.Scenes
60 /// <param name="part"></param> 63 /// <param name="part"></param>
61 public void QueuePartForUpdate(SceneObjectPart part) 64 public void QueuePartForUpdate(SceneObjectPart part)
62 { 65 {
66 if (part.IsAttachment)
67 m_log.DebugFormat("[SCENE VIEWER]: Queueing part {0} {1} for update", part.Name, part.LocalId);
68
63 lock (m_partsUpdateQueue) 69 lock (m_partsUpdateQueue)
64 { 70 {
65 m_partsUpdateQueue.Enqueue(part); 71 m_partsUpdateQueue.Enqueue(part);
@@ -134,7 +140,7 @@ namespace OpenSim.Region.Framework.Scenes
134 } 140 }
135 else if (update.LastTerseUpdateTime <= part.TimeStampTerse) 141 else if (update.LastTerseUpdateTime <= part.TimeStampTerse)
136 { 142 {
137// m_log.DebugFormat( 143// m_log.DebugFormat(AddFullUpdateToAvatar
138// "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", 144// "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}",
139// part.Name, part.UUID, part.TimeStampTerse); 145// part.Name, part.UUID, part.TimeStampTerse);
140 146