diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 7e44492eb5..58983d0029 100755 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -87,7 +87,7 @@ namespace OpenSim.Region.CoreModules.Asset private bool m_FileCacheEnabled = true; - private ExpiringCache m_MemoryCache; + private ExpiringCacheOS m_MemoryCache; private bool m_MemoryCacheEnabled = false; private ExpiringKey m_negativeCache; @@ -143,7 +143,6 @@ namespace OpenSim.Region.CoreModules.Asset if (name == Name) { - m_MemoryCache = new ExpiringCache(); m_negativeCache = new ExpiringKey(2000); m_Enabled = true; @@ -185,6 +184,9 @@ namespace OpenSim.Region.CoreModules.Asset m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", m_CacheWarnAt); } + if(m_MemoryCacheEnabled) + m_MemoryCache = new ExpiringCacheOS((int)m_MemoryExpiration * 500); + m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory); if (m_CacheDirectoryTiers < 1) @@ -352,7 +354,6 @@ namespace OpenSim.Region.CoreModules.Asset private void UpdateMemoryCache(string key, AssetBase asset) { - // NOTE DO NOT USE SLIDEEXPIRE option on current libomv m_MemoryCache.AddOrUpdate(key, asset, m_MemoryExpiration); } @@ -676,11 +677,17 @@ namespace OpenSim.Region.CoreModules.Asset } if (m_MemoryCacheEnabled) - m_MemoryCache = new ExpiringCache(); + { + m_MemoryCache.Dispose(); + m_MemoryCache = new ExpiringCacheOS((int)m_MemoryExpiration * 500); + } if (m_negativeCacheEnabled) + { + m_negativeCache.Dispose(); m_negativeCache = new ExpiringKey(2000); + } - lock(weakAssetReferencesLock) + lock (weakAssetReferencesLock) weakAssetReferences = new Dictionary(); } diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs index b28ce9cab8..bcff9ae9ac 100644 --- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs @@ -66,9 +66,9 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles // The pair of Dictionaries are used to handle the switching of classified ads // by maintaining a cache of classified id to creator id mappings and an interest // count. The entries are removed when the interest count reaches 0. - Dictionary m_classifiedCache = new Dictionary(); - Dictionary m_classifiedInterest = new Dictionary(); - ExpiringCache m_profilesCache = new ExpiringCache(); + readonly Dictionary m_classifiedCache = new Dictionary(); + readonly Dictionary m_classifiedInterest = new Dictionary(); + readonly ExpiringCacheOS m_profilesCache = new ExpiringCacheOS(60000); IAssetCache m_assetCache; IGroupsModule m_groupsModule = null; @@ -86,7 +86,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles public int reqtype; } - private ConcurrentQueue m_asyncRequests = new ConcurrentQueue(); + //private ConcurrentQueue m_asyncRequests = new ConcurrentQueue(); + private ConcurrentStack m_asyncRequests = new ConcurrentStack(); private object m_asyncRequestsLock = new object(); private bool m_asyncRequestsRunning = false; @@ -94,7 +95,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles { lock(m_asyncRequestsLock) { - while(m_asyncRequests.TryDequeue(out AsyncPropsRequest req)) + //while(m_asyncRequests.TryDequeue(out AsyncPropsRequest req)) + while (m_asyncRequests.TryPop(out AsyncPropsRequest req)) { try {