diff --git a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs index 3f99562e9f..83c3c34971 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs @@ -280,9 +280,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge { m_log.DebugFormat("[Concierge]: {0} logs off from {1}", client.Name, client.Scene.RegionInfo.RegionName); RemoveFromAttendeeList(client.AgentId, client.Name, client.Scene); - AnnounceToAgentsRegion(client.Scene, String.Format(m_announceLeaving, client.Name, client.Scene.RegionInfo.RegionName, - m_sceneAttendees[client.Scene].Count)); - UpdateBroker(client.Scene); + lock(m_sceneAttendees) + { + AnnounceToAgentsRegion(client.Scene, String.Format(m_announceLeaving, client.Name, client.Scene.RegionInfo.RegionName, + m_sceneAttendees[client.Scene].Count)); + UpdateBroker(client.Scene); + m_attendeeNames.Remove(client.AgentId); + } } } @@ -348,7 +352,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge } attendees.Remove(agentID); - m_attendeeNames.Remove(agentID); } } @@ -386,10 +389,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge attendees.Count, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, DateTime.UtcNow.ToString("s"))); - foreach (UUID uuid in attendees) + lock(m_sceneAttendees) { - string name = m_attendeeNames[uuid]; - list.Append(String.Format(" \n", name, uuid)); + foreach (UUID uuid in attendees) + { + if (m_attendeeNames.ContainsKey(uuid)) + { + string name = m_attendeeNames[uuid]; + list.Append(String.Format(" \n", name, uuid)); + } + } } list.Append(""); }