diff options
author | John Hurliman | 2010-09-16 17:31:24 -0700 |
---|---|---|
committer | John Hurliman | 2010-09-16 17:31:24 -0700 |
commit | 5321e0e69f5813b03748155193b0833f28c532ec (patch) | |
tree | c51d4cc760056928e97a56b09b170259b0b9e5fd /OpenSim | |
parent | Changed SceneObjectGroup to store parts with the fast and thread-safe MapAndA... (diff) | |
parent | Fix build break by replacing Items.LockItemsForWrite() with lock (Items) {} (diff) | |
download | opensim-SC-5321e0e69f5813b03748155193b0833f28c532ec.zip opensim-SC-5321e0e69f5813b03748155193b0833f28c532ec.tar.gz opensim-SC-5321e0e69f5813b03748155193b0833f28c532ec.tar.bz2 opensim-SC-5321e0e69f5813b03748155193b0833f28c532ec.tar.xz |
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim')
7 files changed, 58 insertions, 6 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> |
diff --git a/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs b/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs index b47ad5d..fc44358 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryDataPlugin.cs | |||
@@ -84,7 +84,7 @@ namespace OpenSim.Tests.Common.Mock | |||
84 | 84 | ||
85 | public List<InventoryItemBase> getInventoryInFolder(UUID folderID) | 85 | public List<InventoryItemBase> getInventoryInFolder(UUID folderID) |
86 | { | 86 | { |
87 | InventoryFolderBase folder = m_folders[folderID]; | 87 | // InventoryFolderBase folder = m_folders[folderID]; |
88 | 88 | ||
89 | // m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0} {1}", folder.Name, folder.ID); | 89 | // m_log.DebugFormat("[MOCK INV DB]: Getting items in folder {0} {1}", folder.Name, folder.ID); |
90 | 90 | ||
@@ -116,7 +116,7 @@ namespace OpenSim.Tests.Common.Mock | |||
116 | 116 | ||
117 | public List<InventoryFolderBase> getInventoryFolders(UUID parentID) | 117 | public List<InventoryFolderBase> getInventoryFolders(UUID parentID) |
118 | { | 118 | { |
119 | InventoryFolderBase parentFolder = m_folders[parentID]; | 119 | // InventoryFolderBase parentFolder = m_folders[parentID]; |
120 | 120 | ||
121 | // m_log.DebugFormat("[MOCK INV DB]: Getting folders in folder {0} {1}", parentFolder.Name, parentFolder.ID); | 121 | // m_log.DebugFormat("[MOCK INV DB]: Getting folders in folder {0} {1}", parentFolder.Name, parentFolder.ID); |
122 | 122 | ||
@@ -185,7 +185,7 @@ namespace OpenSim.Tests.Common.Mock | |||
185 | 185 | ||
186 | public void addInventoryItem(InventoryItemBase item) | 186 | public void addInventoryItem(InventoryItemBase item) |
187 | { | 187 | { |
188 | InventoryFolderBase folder = m_folders[item.Folder]; | 188 | // InventoryFolderBase folder = m_folders[item.Folder]; |
189 | 189 | ||
190 | // m_log.DebugFormat( | 190 | // m_log.DebugFormat( |
191 | // "[MOCK INV DB]: Adding inventory item {0} {1} in {2} {3}", item.Name, item.ID, folder.Name, folder.ID); | 191 | // "[MOCK INV DB]: Adding inventory item {0} {1} in {2} {3}", item.Name, item.ID, folder.Name, folder.ID); |