From 0a4a5bbcef8df5447b39c11ba52b2434a2f60be0 Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Fri, 14 Dec 2007 08:47:15 +0000 Subject: * ARequest changed name to AssetRequest and moved to own file. * The AssetServerBase is now responsible for dequeueing, the server implementations merely recieves ProcessRequest( AssetRequest req ) * Catchall added around queue processing thread so thread won't abort on exceptions. --- .../Communications/Cache/AssetServerBase.cs | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'OpenSim/Framework/Communications/Cache/AssetServerBase.cs') diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs index e117c93..659b9c9 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs @@ -40,7 +40,7 @@ namespace OpenSim.Framework.Communications.Cache public abstract class AssetServerBase : IAssetServer { protected IAssetReceiver _receiver; - protected BlockingQueue _assetRequests; + protected BlockingQueue _assetRequests; protected Thread _localAssetServerThread; protected IAssetProvider m_assetProviderPlugin; protected object syncLock = new object(); @@ -48,7 +48,7 @@ namespace OpenSim.Framework.Communications.Cache protected abstract void StoreAsset(AssetBase asset); protected abstract void CommitAssets(); - protected abstract void RunRequests(); + protected abstract void ProcessRequest(AssetRequest req); public void LoadDefaultAssets() { @@ -64,13 +64,30 @@ namespace OpenSim.Framework.Communications.Cache public AssetServerBase() { MainLog.Instance.Verbose("ASSETSERVER", "Starting asset storage system"); - _assetRequests = new BlockingQueue(); + _assetRequests = new BlockingQueue(); _localAssetServerThread = new Thread(RunRequests); _localAssetServerThread.IsBackground = true; _localAssetServerThread.Start(); } + private void RunRequests() + { + while (true) // Since it's a 'blocking queue' + { + try + { + AssetRequest req = _assetRequests.Dequeue(); + + ProcessRequest(req); + } + catch(Exception e) + { + MainLog.Instance.Error("ASSETSERVER", e.Message ); + } + } + } + public void LoadAsset(AssetBase info, bool image, string filename) { //should request Asset from storage manager @@ -97,7 +114,7 @@ namespace OpenSim.Framework.Communications.Cache public void RequestAsset(LLUUID assetID, bool isTexture) { - ARequest req = new ARequest(); + AssetRequest req = new AssetRequest(); req.AssetID = assetID; req.IsTexture = isTexture; MainLog.Instance.Verbose("ASSET","Adding {0} to request queue", assetID); -- cgit v1.1