aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs7
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs8
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs4
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityInventory.cs9
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs3
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs27
6 files changed, 55 insertions, 3 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 2163c12..cede050 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -1523,7 +1523,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1523 lock (m_entityUpdates.SyncRoot) 1523 lock (m_entityUpdates.SyncRoot)
1524 { 1524 {
1525 m_killRecord.Add(localID); 1525 m_killRecord.Add(localID);
1526 OutPacket(kill, ThrottleOutPacketType.State); 1526
1527 // The throttle queue used here must match that being used for updates. Otherwise, there is a
1528 // chance that a kill packet put on a separate queue will be sent to the client before an existing
1529 // update packet on another queue. Receiving updates after kills results in unowned and undeletable
1530 // scene objects in a viewer until that viewer is relogged in.
1531 OutPacket(kill, ThrottleOutPacketType.Task);
1527 } 1532 }
1528 } 1533 }
1529 } 1534 }
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
index 6232c48..ca5a7bd 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
@@ -412,8 +412,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
412 412
413 /// <summary> 413 /// <summary>
414 /// Loops through all of the packet queues for this client and tries to send 414 /// Loops through all of the packet queues for this client and tries to send
415 /// any outgoing packets, obeying the throttling bucket limits 415 /// an outgoing packet from each, obeying the throttling bucket limits
416 /// </summary> 416 /// </summary>
417 ///
418 /// Packet queues are inspected in ascending numerical order starting from 0. Therefore, queues with a lower
419 /// ThrottleOutPacketType number will see their packet get sent first (e.g. if both Land and Wind queues have
420 /// packets, then the packet at the front of the Land queue will be sent before the packet at the front of the
421 /// wind queue).
422 ///
417 /// <remarks>This function is only called from a synchronous loop in the 423 /// <remarks>This function is only called from a synchronous loop in the
418 /// UDPServer so we don't need to bother making this thread safe</remarks> 424 /// UDPServer so we don't need to bother making this thread safe</remarks>
419 /// <returns>True if any packets were sent, otherwise false</returns> 425 /// <returns>True if any packets were sent, otherwise false</returns>
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 56e8c9b..cb298fd 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -500,6 +500,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
500 // FIXME: Implement? 500 // FIXME: Implement?
501 } 501 }
502 502
503 /// <summary>
504 /// Actually send a packet to a client.
505 /// </summary>
506 /// <param name="outgoingPacket"></param>
503 internal void SendPacketFinal(OutgoingPacket outgoingPacket) 507 internal void SendPacketFinal(OutgoingPacket outgoingPacket)
504 { 508 {
505 UDPPacketBuffer buffer = outgoingPacket.Buffer; 509 UDPPacketBuffer buffer = outgoingPacket.Buffer;
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 7edb43e..2e6faa0 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -58,6 +58,15 @@ namespace OpenSim.Region.Framework.Interfaces
58 void ResetInventoryIDs(); 58 void ResetInventoryIDs();
59 59
60 /// <summary> 60 /// <summary>
61 /// Reset parent object UUID for all the items in the prim's inventory.
62 /// </summary>
63 ///
64 /// If this method is called and there are inventory items, then we regard the inventory as having changed.
65 ///
66 /// <param name="linkNum">Link number for the part</param>
67 void ResetObjectID();
68
69 /// <summary>
61 /// Change every item in this inventory to a new owner. 70 /// Change every item in this inventory to a new owner.
62 /// </summary> 71 /// </summary>
63 /// <param name="ownerId"></param> 72 /// <param name="ownerId"></param>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 024bdc9..95cd26f 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -500,7 +500,7 @@ namespace OpenSim.Region.Framework.Scenes
500 500
501 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part 501 // This is necessary so that TaskInventoryItem parent ids correctly reference the new uuid of this part
502 if (Inventory != null) 502 if (Inventory != null)
503 Inventory.ResetInventoryIDs(); 503 Inventory.ResetObjectID();
504 } 504 }
505 } 505 }
506 506
@@ -2763,6 +2763,7 @@ namespace OpenSim.Region.Framework.Scenes
2763 UUID = UUID.Random(); 2763 UUID = UUID.Random();
2764 LinkNum = linkNum; 2764 LinkNum = linkNum;
2765 LocalId = 0; 2765 LocalId = 0;
2766 Inventory.ResetInventoryIDs();
2766 } 2767 }
2767 2768
2768 /// <summary> 2769 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 0e3daf76..210f5cd 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -140,6 +140,33 @@ namespace OpenSim.Region.Framework.Scenes
140 } 140 }
141 } 141 }
142 142
143 public void ResetObjectID()
144 {
145 lock (Items)
146 {
147 if (Items.Count == 0)
148 {
149 return;
150 }
151
152 HasInventoryChanged = true;
153 if (m_part.ParentGroup != null)
154 {
155 m_part.ParentGroup.HasGroupChanged = true;
156 }
157
158 IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values);
159 Items.Clear();
160
161 foreach (TaskInventoryItem item in items)
162 {
163 item.ParentPartID = m_part.UUID;
164 item.ParentID = m_part.UUID;
165 Items.Add(item.ItemID, item);
166 }
167 }
168 }
169
143 /// <summary> 170 /// <summary>
144 /// Change every item in this inventory to a new owner. 171 /// Change every item in this inventory to a new owner.
145 /// </summary> 172 /// </summary>