mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
* Trying to address TextureSender issues
* The BlockingQueue exposes Contains so we can make sure we don't add a TextureSender to the queue if there's already one present * introduced some TryGetValue and various code convention stuff
This commit is contained in:
@@ -32,27 +32,34 @@ namespace OpenSim.Framework
|
||||
{
|
||||
public class BlockingQueue<T>
|
||||
{
|
||||
private Queue<T> _queue = new Queue<T>();
|
||||
private object _queueSync = new object();
|
||||
private readonly Queue<T> m_queue = new Queue<T>();
|
||||
private readonly object m_queueSync = new object();
|
||||
|
||||
public void Enqueue(T value)
|
||||
{
|
||||
lock (_queueSync)
|
||||
lock (m_queueSync)
|
||||
{
|
||||
_queue.Enqueue(value);
|
||||
Monitor.Pulse(_queueSync);
|
||||
m_queue.Enqueue(value);
|
||||
Monitor.Pulse(m_queueSync);
|
||||
}
|
||||
}
|
||||
|
||||
public T Dequeue()
|
||||
{
|
||||
lock (_queueSync)
|
||||
lock (m_queueSync)
|
||||
{
|
||||
if (_queue.Count < 1)
|
||||
Monitor.Wait(_queueSync);
|
||||
if (m_queue.Count < 1)
|
||||
{
|
||||
Monitor.Wait(m_queueSync);
|
||||
}
|
||||
|
||||
return _queue.Dequeue();
|
||||
return m_queue.Dequeue();
|
||||
}
|
||||
}
|
||||
|
||||
public bool Contains(T item)
|
||||
{
|
||||
return m_queue.Contains(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,10 +56,10 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
|
||||
public Dictionary<LLUUID, AssetRequestsList> RequestLists = new Dictionary<LLUUID, AssetRequestsList>();
|
||||
|
||||
private IAssetServer m_assetServer;
|
||||
private readonly IAssetServer m_assetServer;
|
||||
|
||||
private Thread m_assetCacheThread;
|
||||
private LogBase m_log;
|
||||
private readonly Thread m_assetCacheThread;
|
||||
private readonly LogBase m_log;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
|
||||
@@ -37,11 +37,11 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
{
|
||||
public abstract class AssetServerBase : IAssetServer
|
||||
{
|
||||
protected IAssetReceiver _receiver;
|
||||
protected BlockingQueue<AssetRequest> _assetRequests;
|
||||
protected Thread _localAssetServerThread;
|
||||
protected IAssetProvider m_assetProviderPlugin;
|
||||
protected object syncLock = new object();
|
||||
protected IAssetReceiver m_receiver;
|
||||
protected BlockingQueue<AssetRequest> m_assetRequests;
|
||||
protected Thread m_localAssetServerThread;
|
||||
protected IAssetProvider m_assetProvider;
|
||||
protected object m_syncLock = new object();
|
||||
|
||||
// Temporarily hardcoded - should be a plugin
|
||||
protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
|
||||
@@ -71,14 +71,14 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
MainLog.Instance.Verbose(
|
||||
"ASSET", "Asset {0} received from asset server", req.AssetID);
|
||||
|
||||
_receiver.AssetReceived(asset, req.IsTexture);
|
||||
m_receiver.AssetReceived(asset, req.IsTexture);
|
||||
}
|
||||
else
|
||||
{
|
||||
MainLog.Instance.Error(
|
||||
"ASSET", "Asset {0} not found by asset server", req.AssetID);
|
||||
|
||||
_receiver.AssetNotFound(req.AssetID);
|
||||
m_receiver.AssetNotFound(req.AssetID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,11 +95,11 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
public AssetServerBase()
|
||||
{
|
||||
MainLog.Instance.Verbose("ASSETSERVER", "Starting asset storage system");
|
||||
_assetRequests = new BlockingQueue<AssetRequest>();
|
||||
m_assetRequests = new BlockingQueue<AssetRequest>();
|
||||
|
||||
_localAssetServerThread = new Thread(RunRequests);
|
||||
_localAssetServerThread.IsBackground = true;
|
||||
_localAssetServerThread.Start();
|
||||
m_localAssetServerThread = new Thread(RunRequests);
|
||||
m_localAssetServerThread.IsBackground = true;
|
||||
m_localAssetServerThread.Start();
|
||||
}
|
||||
|
||||
private void RunRequests()
|
||||
@@ -108,7 +108,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
{
|
||||
try
|
||||
{
|
||||
AssetRequest req = _assetRequests.Dequeue();
|
||||
AssetRequest req = m_assetRequests.Dequeue();
|
||||
|
||||
ProcessRequest(req);
|
||||
}
|
||||
@@ -121,7 +121,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
|
||||
public void SetReceiver(IAssetReceiver receiver)
|
||||
{
|
||||
_receiver = receiver;
|
||||
m_receiver = receiver;
|
||||
}
|
||||
|
||||
public void RequestAsset(LLUUID assetID, bool isTexture)
|
||||
@@ -129,23 +129,23 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
AssetRequest req = new AssetRequest();
|
||||
req.AssetID = assetID;
|
||||
req.IsTexture = isTexture;
|
||||
_assetRequests.Enqueue(req);
|
||||
m_assetRequests.Enqueue(req);
|
||||
|
||||
MainLog.Instance.Verbose("ASSET", "Added {0} to request queue", assetID);
|
||||
}
|
||||
|
||||
public virtual void UpdateAsset(AssetBase asset)
|
||||
{
|
||||
lock (syncLock)
|
||||
lock (m_syncLock)
|
||||
{
|
||||
m_assetProviderPlugin.UpdateAsset(asset);
|
||||
m_assetProviderPlugin.CommitAssets();
|
||||
m_assetProvider.UpdateAsset(asset);
|
||||
m_assetProvider.CommitAssets();
|
||||
}
|
||||
}
|
||||
|
||||
public void StoreAndCommitAsset(AssetBase asset)
|
||||
{
|
||||
lock (syncLock)
|
||||
lock (m_syncLock)
|
||||
{
|
||||
StoreAsset(asset);
|
||||
CommitAssets();
|
||||
@@ -154,7 +154,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
|
||||
public virtual void Close()
|
||||
{
|
||||
_localAssetServerThread.Abort();
|
||||
m_localAssetServerThread.Abort();
|
||||
}
|
||||
|
||||
public void SetServerInfo(string ServerUrl, string ServerKey)
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
|
||||
public SQLAssetServer(IAssetProvider assetProvider)
|
||||
{
|
||||
m_assetProviderPlugin = assetProvider;
|
||||
m_assetProvider = assetProvider;
|
||||
}
|
||||
|
||||
public void AddPlugin(string FileName)
|
||||
@@ -58,12 +58,12 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
{
|
||||
IAssetProvider plug =
|
||||
(IAssetProvider) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||
m_assetProviderPlugin = plug;
|
||||
m_assetProviderPlugin.Initialise();
|
||||
m_assetProvider = plug;
|
||||
m_assetProvider.Initialise();
|
||||
|
||||
MainLog.Instance.Verbose("AssetStorage",
|
||||
"Added " + m_assetProviderPlugin.Name + " " +
|
||||
m_assetProviderPlugin.Version);
|
||||
"Added " + m_assetProvider.Name + " " +
|
||||
m_assetProvider.Version);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,15 +74,15 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
{
|
||||
base.Close();
|
||||
|
||||
m_assetProviderPlugin.CommitAssets();
|
||||
m_assetProvider.CommitAssets();
|
||||
}
|
||||
|
||||
protected override AssetBase GetAsset(AssetRequest req)
|
||||
{
|
||||
AssetBase asset;
|
||||
lock (syncLock)
|
||||
lock (m_syncLock)
|
||||
{
|
||||
asset = m_assetProviderPlugin.FetchAsset(req.AssetID);
|
||||
asset = m_assetProvider.FetchAsset(req.AssetID);
|
||||
}
|
||||
|
||||
return asset;
|
||||
@@ -90,12 +90,12 @@ namespace OpenSim.Framework.Communications.Cache
|
||||
|
||||
protected override void StoreAsset(AssetBase asset)
|
||||
{
|
||||
m_assetProviderPlugin.CreateAsset(asset);
|
||||
m_assetProvider.CreateAsset(asset);
|
||||
}
|
||||
|
||||
protected override void CommitAssets()
|
||||
{
|
||||
m_assetProviderPlugin.CommitAssets();
|
||||
m_assetProvider.CommitAssets();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user