aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs33
1 files changed, 27 insertions, 6 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index d449e82..9cee590 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -357,7 +357,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
357 /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock 357 /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock
358 /// 358 ///
359 /// </value> 359 /// </value>
360// protected HashSet<uint> m_killRecord; 360 protected List<uint> m_killRecord;
361 361
362// protected HashSet<uint> m_attachmentsSent; 362// protected HashSet<uint> m_attachmentsSent;
363 363
@@ -509,7 +509,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
509 m_entityUpdates = new PriorityQueue(m_scene.Entities.Count); 509 m_entityUpdates = new PriorityQueue(m_scene.Entities.Count);
510 m_entityProps = new PriorityQueue(m_scene.Entities.Count); 510 m_entityProps = new PriorityQueue(m_scene.Entities.Count);
511 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>(); 511 m_fullUpdateDataBlocksBuilder = new List<ObjectUpdatePacket.ObjectDataBlock>();
512// m_killRecord = new HashSet<uint>(); 512 m_killRecord = new List<uint>();
513// m_attachmentsSent = new HashSet<uint>(); 513// m_attachmentsSent = new HashSet<uint>();
514 514
515 m_assetService = m_scene.RequestModuleInterface<IAssetService>(); 515 m_assetService = m_scene.RequestModuleInterface<IAssetService>();
@@ -3992,7 +3992,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3992 foreach (EntityUpdate update in updates) 3992 foreach (EntityUpdate update in updates)
3993 ResendPrimUpdate(update); 3993 ResendPrimUpdate(update);
3994 } 3994 }
3995 3995
3996 private void ProcessEntityUpdates(int maxUpdates) 3996 private void ProcessEntityUpdates(int maxUpdates)
3997 { 3997 {
3998 OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>(); 3998 OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>> objectUpdateBlocks = new OpenSim.Framework.Lazy<List<ObjectUpdatePacket.ObjectDataBlock>>();
@@ -4005,6 +4005,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4005 OpenSim.Framework.Lazy<List<EntityUpdate>> terseUpdates = new OpenSim.Framework.Lazy<List<EntityUpdate>>(); 4005 OpenSim.Framework.Lazy<List<EntityUpdate>> terseUpdates = new OpenSim.Framework.Lazy<List<EntityUpdate>>();
4006 OpenSim.Framework.Lazy<List<EntityUpdate>> terseAgentUpdates = new OpenSim.Framework.Lazy<List<EntityUpdate>>(); 4006 OpenSim.Framework.Lazy<List<EntityUpdate>> terseAgentUpdates = new OpenSim.Framework.Lazy<List<EntityUpdate>>();
4007 4007
4008
4008 // Check to see if this is a flush 4009 // Check to see if this is a flush
4009 if (maxUpdates <= 0) 4010 if (maxUpdates <= 0)
4010 { 4011 {
@@ -4033,9 +4034,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4033 { 4034 {
4034 SceneObjectPart part = (SceneObjectPart)update.Entity; 4035 SceneObjectPart part = (SceneObjectPart)update.Entity;
4035 4036
4036 if (part.ParentGroup.IsDeleted || part.ParentGroup.inTransit) 4037 if (part.ParentGroup.inTransit)
4037 continue; 4038 continue;
4038 4039
4040 if (part.ParentGroup.IsDeleted)
4041 {
4042 // Don't send updates for objects that have been marked deleted.
4043 // Instead send another kill object, because the first one may have gotten
4044 // into a race condition
4045 if (!m_killRecord.Contains(part.ParentGroup.LocalId))
4046 m_killRecord.Add(part.ParentGroup.LocalId);
4047 continue;
4048 }
4049
4039 if (part.ParentGroup.IsAttachment) 4050 if (part.ParentGroup.IsAttachment)
4040 { // Someone else's HUD, why are we getting these? 4051 { // Someone else's HUD, why are we getting these?
4041 if (part.ParentGroup.OwnerID != AgentId && part.ParentGroup.HasPrivateAttachmentPoint) 4052 if (part.ParentGroup.OwnerID != AgentId && part.ParentGroup.HasPrivateAttachmentPoint)
@@ -4233,7 +4244,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4233 4244
4234 for (int i = 0; i < blocks.Count; i++) 4245 for (int i = 0; i < blocks.Count; i++)
4235 packet.ObjectData[i] = blocks[i]; 4246 packet.ObjectData[i] = blocks[i];
4236 4247
4237 OutPacket(packet, ThrottleOutPacketType.Task, true); 4248 OutPacket(packet, ThrottleOutPacketType.Task, true);
4238 } 4249 }
4239 4250
@@ -4248,7 +4259,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4248 4259
4249 for (int i = 0; i < blocks.Count; i++) 4260 for (int i = 0; i < blocks.Count; i++)
4250 packet.ObjectData[i] = blocks[i]; 4261 packet.ObjectData[i] = blocks[i];
4251 4262
4252 OutPacket(packet, ThrottleOutPacketType.Task, true); 4263 OutPacket(packet, ThrottleOutPacketType.Task, true);
4253 } 4264 }
4254 4265
@@ -4270,6 +4281,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4270 } 4281 }
4271 4282
4272 #endregion Packet Sending 4283 #endregion Packet Sending
4284
4285 #region Handle deleted objects
4286 if (m_killRecord.Count > 0)
4287 {
4288 SendKillObject(m_killRecord);
4289 m_killRecord.Clear();
4290 }
4291 #endregion
4292
4293
4273 } 4294 }
4274 4295
4275 // hack.. dont use 4296 // hack.. dont use