diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 84e42a37d1..6f7c4da20b 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -35,6 +35,8 @@ using log4net; namespace OpenSim.Framework.Communications.Cache { + internal delegate void AddItemDelegate(InventoryItemBase itemInfo); + internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo); internal delegate void DeleteItemDelegate(LLUUID itemID); internal delegate void CreateFolderDelegate(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID); @@ -532,13 +534,20 @@ namespace OpenSim.Framework.Communications.Cache /// Add an item to the user's inventory /// /// - public void AddItem(InventoryItemBase itemInfo) + public void AddItem(InventoryItemBase item) { if (HasInventory) { - ItemReceive(itemInfo); - m_commsManager.InventoryService.AddItem(itemInfo); + ItemReceive(item); + m_commsManager.InventoryService.AddItem(item); } + else + { + AddRequest( + new InventoryRequest( + Delegate.CreateDelegate(typeof(AddItemDelegate), this, "AddItem"), + new object[] { item })); + } } /// @@ -546,12 +555,19 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void UpdateItem(InventoryItemBase itemInfo) + public void UpdateItem(InventoryItemBase item) { if (HasInventory) { - m_commsManager.InventoryService.UpdateItem(itemInfo); + m_commsManager.InventoryService.UpdateItem(item); } + else + { + AddRequest( + new InventoryRequest( + Delegate.CreateDelegate(typeof(UpdateItemDelegate), this, "UpdateItem"), + new object[] { item })); + } } /// diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index 5c1902fa57..4864185dde 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs @@ -62,7 +62,7 @@ namespace OpenSim.Grid.InventoryServer m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID); // uncomment me to simulate an overloaded inventory server - Thread.Sleep(18000); + //Thread.Sleep(18000); InventoryCollection invCollection = new InventoryCollection(); diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 490457de4a..1c7e98ef74 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -486,6 +486,7 @@ namespace OpenSim.Region.Environment.Scenes if (userInfo == null) { m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString()); + return; } @@ -509,12 +510,14 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); + return; } } else { m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString() + ", no root folder"); + return; } }