From 8068c083f62b41d52b808087407ded047b35f931 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 21 Sep 2012 01:36:23 +0100 Subject: [PATCH] Simplify UuidGatherer by performing asset fetch synchronously rather than using the async call but waiting for completion anyway! --- .../Region/Framework/Scenes/UuidGatherer.cs | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index efb68a2949..af9909079e 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs @@ -57,17 +57,17 @@ namespace OpenSim.Region.Framework.Scenes /// Asset cache used for gathering assets /// protected IAssetService m_assetCache; - - /// - /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate - /// asset was found by the asset service. - /// - private AssetBase m_requestedObjectAsset; - /// - /// Signal whether we are currently waiting for the asset service to deliver an asset. - /// - private bool m_waitingForObjectAsset; +// /// +// /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate +// /// asset was found by the asset service. +// /// +// private AssetBase m_requestedObjectAsset; +// +// /// +// /// Signal whether we are currently waiting for the asset service to deliver an asset. +// /// +// private bool m_waitingForObjectAsset; public UuidGatherer(IAssetService assetCache) { @@ -195,18 +195,18 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// The callback made when we request the asset for an object from the asset service. - /// - private void AssetReceived(string id, Object sender, AssetBase asset) - { - lock (this) - { - m_requestedObjectAsset = asset; - m_waitingForObjectAsset = false; - Monitor.Pulse(this); - } - } +// /// +// /// The callback made when we request the asset for an object from the asset service. +// /// +// private void AssetReceived(string id, Object sender, AssetBase asset) +// { +// lock (this) +// { +// m_requestedObjectAsset = asset; +// m_waitingForObjectAsset = false; +// Monitor.Pulse(this); +// } +// } /// /// Get an asset synchronously, potentially using an asynchronous callback. If the @@ -216,25 +216,29 @@ namespace OpenSim.Region.Framework.Scenes /// protected virtual AssetBase GetAsset(UUID uuid) { - m_waitingForObjectAsset = true; - m_assetCache.Get(uuid.ToString(), this, AssetReceived); + return m_assetCache.Get(uuid.ToString()); - // The asset cache callback can either - // - // 1. Complete on the same thread (if the asset is already in the cache) or - // 2. Come in via a different thread (if we need to go fetch it). - // - // The code below handles both these alternatives. - lock (this) - { - if (m_waitingForObjectAsset) - { - Monitor.Wait(this); - m_waitingForObjectAsset = false; - } - } - - return m_requestedObjectAsset; + // XXX: Switching to do this synchronously where the call was async before but we always waited for it + // to complete anyway! +// m_waitingForObjectAsset = true; +// m_assetCache.Get(uuid.ToString(), this, AssetReceived); +// +// // The asset cache callback can either +// // +// // 1. Complete on the same thread (if the asset is already in the cache) or +// // 2. Come in via a different thread (if we need to go fetch it). +// // +// // The code below handles both these alternatives. +// lock (this) +// { +// if (m_waitingForObjectAsset) +// { +// Monitor.Wait(this); +// m_waitingForObjectAsset = false; +// } +// } +// +// return m_requestedObjectAsset; } ///