diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs index f294372e72..276ca21f92 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs @@ -35,6 +35,7 @@ using OpenSim.Framework; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using Mono.Addins; +using System.Runtime.InteropServices; namespace OpenSim.Region.CoreModules.Agent.AssetTransaction { @@ -109,16 +110,11 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction { lock (AgentTransactions) { - if (!AgentTransactions.ContainsKey(userID)) - { - AgentAssetTransactions transactions = - new AgentAssetTransactions(userID, m_Scene, - m_dumpAssetsToFile); + ref AgentAssetTransactions value = ref CollectionsMarshal.GetValueRefOrAddDefault(AgentTransactions, userID, out bool exists); + if (!exists) + value = new AgentAssetTransactions(userID, m_Scene, m_dumpAssetsToFile); - AgentTransactions.Add(userID, transactions); - } - - return AgentTransactions[userID]; + return value; } } @@ -213,8 +209,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction // "[ASSET TRANSACTION MODULE]: Called HandleTaskItemUpdateFromTransaction with item {0} in {1} for {2} in {3}", // item.Name, part.Name, remoteClient.Name, m_Scene.RegionInfo.RegionName); - AgentAssetTransactions transactions = - GetUserTransactions(remoteClient.AgentId); + AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); transactions.RequestUpdateTaskInventoryItem(remoteClient, part, transactionID, item); @@ -243,9 +238,8 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction (AssetType)type == AssetType.Animation) && tempFile == false) { - ScenePresence avatar = null; Scene scene = (Scene)remoteClient.Scene; - scene.TryGetScenePresence(remoteClient.AgentId, out avatar); + scene.TryGetScenePresence(remoteClient.AgentId, out ScenePresence avatar); // check user level if (avatar != null)