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)
{
if ((LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup)
if (LandData.GroupID != UUID.Zero && (LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup)
{
IGroupsModule groupsModule =
m_scene.RequestModuleInterface<IGroupsModule>();
ScenePresence sp;
if (!m_scene.TryGetScenePresence(avatar, out sp))
return false;
List<UUID> agentGroups = new List<UUID>();
if (groupsModule != null)
{
GroupMembershipData[] GroupMembership =
groupsModule.GetMembershipData(avatar);
if (GroupMembership != null)
{
for (int i = 0; i < GroupMembership.Length; i++)
{
if (LandData.GroupID == GroupMembership[i].GroupID)
{
return true;
}
}
}
}
if (!sp.ControllingClient.IsGroupMember(LandData.GroupID))
return false;
return true;
}
return false;
}