Group chat: prevent a situation where dupe IMs could occur.

TeleportWork
Diva Canto 2013-07-28 19:31:17 -07:00
parent 1d4bf06fe7
commit 1b94de8e58
1 changed files with 3 additions and 9 deletions

View File

@ -405,7 +405,6 @@ namespace OpenSim.Groups
GridRegion regionOfOrigin = aScene.GridService.GetRegionByUUID(aScene.RegionInfo.ScopeID, regionID); GridRegion regionOfOrigin = aScene.GridService.GetRegionByUUID(aScene.RegionInfo.ScopeID, regionID);
List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), GroupID); List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), GroupID);
List<UUID> alreadySeen = new List<UUID>();
//if (m_debugEnabled) //if (m_debugEnabled)
// foreach (GroupMembersData m in groupMembers) // foreach (GroupMembersData m in groupMembers)
@ -415,15 +414,10 @@ namespace OpenSim.Groups
{ {
s.ForEachScenePresence(sp => s.ForEachScenePresence(sp =>
{ {
// We need this, because we are searching through all // If we got this via grid messaging, it's because the caller thinks
// SPs, both root and children // that the root agent is here. We should only send the IM to root agents.
if (alreadySeen.Contains(sp.UUID)) if (sp.IsChildAgent)
{
if (m_debugEnabled)
m_log.DebugFormat("[Groups.Messaging]: skipping agent {0} because we've already seen it", sp.UUID);
return; return;
}
alreadySeen.Add(sp.UUID);
GroupMembersData m = groupMembers.Find(gmd => GroupMembersData m = groupMembers.Find(gmd =>
{ {