OpenSim.Region.CoreModules.World.Archiver.AssetsRequest.OnRequestCallbackTimeout C# (CSharp) Method

OnRequestCallbackTimeout() protected method

protected OnRequestCallbackTimeout ( object source, System.Timers.ElapsedEventArgs args ) : void
source object
args System.Timers.ElapsedEventArgs
return void
        protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args)
        {
            try
            {
                lock (this)
                {
                    // Take care of the possibilty that this thread started but was paused just outside the lock before
                    // the final request came in (assuming that such a thing is possible)
                    if (m_requestState == RequestState.Completed)
                        return;
                    
                    m_requestState = RequestState.Aborted;
                }

                // Calculate which uuids were not found.  This is an expensive way of doing it, but this is a failure
                // case anyway.
                List<UUID> uuids = new List<UUID>();
                foreach (UUID uuid in m_uuids.Keys)
                {
                    uuids.Add(uuid);
                }

                foreach (UUID uuid in m_foundAssetUuids)
                {
                    uuids.Remove(uuid);
                }
    
                foreach (UUID uuid in m_notFoundAssetUuids)
                {
                    uuids.Remove(uuid);
                }
    
                m_log.ErrorFormat(
                    "[ARCHIVER]: Asset service failed to return information about {0} requested assets", uuids.Count);
    
                int i = 0;
                foreach (UUID uuid in uuids)
                {
                    m_log.ErrorFormat("[ARCHIVER]: No information about asset {0} received", uuid);
    
                    if (++i >= MAX_UUID_DISPLAY_ON_TIMEOUT)
                        break;
                }
    
                if (uuids.Count > MAX_UUID_DISPLAY_ON_TIMEOUT)
                    m_log.ErrorFormat(
                        "[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT);

                m_log.Error("[ARCHIVER]: OAR save aborted.  PLEASE DO NOT USE THIS OAR, IT WILL BE INCOMPLETE.");
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[ARCHIVER]: Timeout handler exception {0}", e);
            }
            finally
            {
                m_assetsArchiver.ForceClose();
            }
        }