From af9bd993bb71ed1d6c3719a78f030d3525e87ec7 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 11 Aug 2020 15:33:41 +0100 Subject: [PATCH] more (almost) useless changes on the used expiring thing --- .../CoreModules/World/Land/LandObject.cs | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 6d273be3c0..4c97e7be60 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs @@ -47,18 +47,19 @@ namespace OpenSim.Region.CoreModules.World.Land private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly string LogHeader = "[LAND OBJECT]"; + protected const int GROUPMEMBERCACHETIMEOUT = 30000; // cache invalidation after 30s + private readonly int landUnit = 4; private int m_lastSeqId = 0; private int m_expiryCounter = 0; protected Scene m_scene; - protected List primsOverMe = new List(); - private Dictionary m_listTransactions = new Dictionary(); - private object m_listTransactionsLock = new object(); + protected readonly List primsOverMe = new List(); + private readonly Dictionary m_listTransactions = new Dictionary(); + private readonly object m_listTransactionsLock = new object(); - protected ExpiringCache m_groupMemberCache = new ExpiringCache(); - protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds + protected readonly ExpiringCacheOS m_groupMemberCache = new ExpiringCacheOS(); IDwellModule m_dwellModule; private bool[,] m_landBitmap; @@ -488,6 +489,8 @@ namespace OpenSim.Region.CoreModules.World.Land if (!LandData.IsGroupOwned) { newData.GroupID = args.GroupID; + if(newData.GroupID != LandData.GroupID) + m_groupMemberCache.Clear(); allowedDelta |= (uint)(ParcelFlags.AllowDeedToGroup | ParcelFlags.ContributeWithDeed | @@ -669,15 +672,14 @@ namespace OpenSim.Region.CoreModules.World.Land { if (LandData.GroupID != UUID.Zero && (LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup) { - ScenePresence sp; - if (!m_scene.TryGetScenePresence(avatar, out sp)) + if (m_groupMemberCache.TryGetValue(avatar, out bool isMember)) + { + m_groupMemberCache.Add(avatar, isMember, GROUPMEMBERCACHETIMEOUT); + return isMember; + } + + if (!m_scene.TryGetScenePresence(avatar, out ScenePresence sp)) { - bool isMember; - if (m_groupMemberCache.TryGetValue(avatar, out isMember)) - { - m_groupMemberCache.Update(avatar, isMember, m_groupMemberCacheTimeout); - return isMember; - } IGroupsModule groupsModule = m_scene.RequestModuleInterface(); if (groupsModule == null) @@ -686,7 +688,7 @@ namespace OpenSim.Region.CoreModules.World.Land GroupMembershipData[] membership = groupsModule.GetMembershipData(avatar); if (membership == null || membership.Length == 0) { - m_groupMemberCache.Add(avatar, false, m_groupMemberCacheTimeout); + m_groupMemberCache.Add(avatar, false, GROUPMEMBERCACHETIMEOUT); return false; } @@ -694,15 +696,19 @@ namespace OpenSim.Region.CoreModules.World.Land { if (d.GroupID == LandData.GroupID) { - m_groupMemberCache.Add(avatar, true, m_groupMemberCacheTimeout); + m_groupMemberCache.Add(avatar, true, GROUPMEMBERCACHETIMEOUT); return true; } } - m_groupMemberCache.Add(avatar, false, m_groupMemberCacheTimeout); + m_groupMemberCache.Add(avatar, false, GROUPMEMBERCACHETIMEOUT); return false; } - - return sp.ControllingClient.IsGroupMember(LandData.GroupID); + else + { + isMember = sp.ControllingClient.IsGroupMember(LandData.GroupID); + m_groupMemberCache.Add(avatar, isMember, GROUPMEMBERCACHETIMEOUT); + return isMember; + } } return false; }