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>
 | 
			
		||||
        /// <returns>An asset retrieved from the file cache.  null if there was a problem retrieving an asset.</returns>
 | 
			
		||||
        private AssetBase GetFromFileCache(string id)
 | 
			
		||||
        {
 | 
			
		||||
            AssetBase asset = null;
 | 
			
		||||
           
 | 
			
		||||
        {          
 | 
			
		||||
            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))
 | 
			
		||||
            {
 | 
			
		||||
                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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue