diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 8c84c98..8238e23 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | |||
@@ -222,7 +222,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
222 | public void SendCloseChildAgentConnections(UUID agentID, List<ulong> regionslst) | 222 | public void SendCloseChildAgentConnections(UUID agentID, List<ulong> regionslst) |
223 | { | 223 | { |
224 | foreach (ulong handle in regionslst) | 224 | foreach (ulong handle in regionslst) |
225 | Util.FireAndForget(delegate { SendCloseChildAgent(agentID, handle); }); | 225 | { |
226 | // We must take a copy here since handle is acts like a reference when used in an iterator. | ||
227 | // This leads to race conditions if directly passed to SendCloseChildAgent with more than one neighbour region. | ||
228 | ulong handleCopy = handle; | ||
229 | Util.FireAndForget((o) => { SendCloseChildAgent(agentID, handleCopy); }); | ||
230 | } | ||
226 | } | 231 | } |
227 | 232 | ||
228 | public List<GridRegion> RequestNamedRegions(string name, int maxNumber) | 233 | public List<GridRegion> RequestNamedRegions(string name, int maxNumber) |