Prevent database lookups on every avatar movement when land is set to group

access. Fixes a massive performance degradation.
avinationmerge
Melanie 2010-10-23 00:18:56 +02:00
parent fc33d569cd
commit c3ddf46188
1 changed files with 8 additions and 20 deletions

View File

@ -290,28 +290,16 @@ namespace OpenSim.Region.CoreModules.World.Land
public bool HasGroupAccess(UUID avatar) public bool HasGroupAccess(UUID avatar)
{ {
if ((LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup) if (LandData.GroupID != UUID.Zero && (LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup)
{ {
IGroupsModule groupsModule = ScenePresence sp;
m_scene.RequestModuleInterface<IGroupsModule>(); if (!m_scene.TryGetScenePresence(avatar, out sp))
return false;
List<UUID> agentGroups = new List<UUID>(); if (!sp.ControllingClient.IsGroupMember(LandData.GroupID))
if (groupsModule != null) return false;
{
GroupMembershipData[] GroupMembership = return true;
groupsModule.GetMembershipData(avatar);
if (GroupMembership != null)
{
for (int i = 0; i < GroupMembership.Length; i++)
{
if (LandData.GroupID == GroupMembership[i].GroupID)
{
return true;
}
}
}
}
} }
return false; return false;
} }