In the flotasm asset cache, if we get a request for a file that we're actively writing, simply return null instead of first logging an exception.
parent
f8785b5f47
commit
9fee431cc8
|
@ -341,11 +341,35 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <returns>An asset retrieved from the file cache. null if there was a problem retrieving an asset.</returns>
|
/// <returns>An asset retrieved from the file cache. null if there was a problem retrieving an asset.</returns>
|
||||||
private AssetBase GetFromFileCache(string id)
|
private AssetBase GetFromFileCache(string id)
|
||||||
{
|
{
|
||||||
AssetBase asset = null;
|
|
||||||
|
|
||||||
string filename = GetFileName(id);
|
string filename = GetFileName(id);
|
||||||
|
|
||||||
|
#if WAIT_ON_INPROGRESS_REQUESTS
|
||||||
|
// Check if we're already downloading this asset. If so, try to wait for it to
|
||||||
|
// download.
|
||||||
|
if (m_WaitOnInprogressTimeout > 0)
|
||||||
|
{
|
||||||
|
m_RequestsForInprogress++;
|
||||||
|
|
||||||
|
ManualResetEvent waitEvent;
|
||||||
|
if (m_CurrentlyWriting.TryGetValue(filename, out waitEvent))
|
||||||
|
{
|
||||||
|
waitEvent.WaitOne(m_WaitOnInprogressTimeout);
|
||||||
|
return Get(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Track how often we have the problem that an asset is requested while
|
||||||
|
// it is still being downloaded by a previous request.
|
||||||
|
if (m_CurrentlyWriting.Contains(filename))
|
||||||
|
{
|
||||||
|
m_RequestsForInprogress++;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
AssetBase asset = null;
|
||||||
|
|
||||||
if (File.Exists(filename))
|
if (File.Exists(filename))
|
||||||
{
|
{
|
||||||
FileStream stream = null;
|
FileStream stream = null;
|
||||||
|
@ -383,28 +407,6 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if WAIT_ON_INPROGRESS_REQUESTS
|
|
||||||
// Check if we're already downloading this asset. If so, try to wait for it to
|
|
||||||
// download.
|
|
||||||
if (m_WaitOnInprogressTimeout > 0)
|
|
||||||
{
|
|
||||||
m_RequestsForInprogress++;
|
|
||||||
|
|
||||||
ManualResetEvent waitEvent;
|
|
||||||
if (m_CurrentlyWriting.TryGetValue(filename, out waitEvent))
|
|
||||||
{
|
|
||||||
waitEvent.WaitOne(m_WaitOnInprogressTimeout);
|
|
||||||
return Get(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// Track how often we have the problem that an asset is requested while
|
|
||||||
// it is still being downloaded by a previous request.
|
|
||||||
if (m_CurrentlyWriting.Contains(filename))
|
|
||||||
{
|
|
||||||
m_RequestsForInprogress++;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue