diff options
Easy on locking m_scenePresences in RequestTeleportLocation. With the extra locks of SceneGraph ScenePresences introduced in 7982, this was making TPs not close the agent in the departing region due to locking. That locking problem seemed to occur only in Linux/mono -- I suspect a mono bug here.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index a837fba..bbc6232 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -3139,13 +3139,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
3139 | public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, Vector3 position, | 3139 | public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, Vector3 position, |
3140 | Vector3 lookAt, uint teleportFlags) | 3140 | Vector3 lookAt, uint teleportFlags) |
3141 | { | 3141 | { |
3142 | ScenePresence sp = null; | ||
3142 | lock (m_scenePresences) | 3143 | lock (m_scenePresences) |
3143 | { | 3144 | { |
3144 | if (m_scenePresences.ContainsKey(remoteClient.AgentId)) | 3145 | if (m_scenePresences.ContainsKey(remoteClient.AgentId)) |
3145 | { | 3146 | sp = m_scenePresences[remoteClient.AgentId]; |
3146 | m_sceneGridService.RequestTeleportToLocation(m_scenePresences[remoteClient.AgentId], regionHandle, | 3147 | } |
3147 | position, lookAt, teleportFlags); | 3148 | if (sp!= null) |
3148 | } | 3149 | { |
3150 | m_sceneGridService.RequestTeleportToLocation(sp, regionHandle, | ||
3151 | position, lookAt, teleportFlags); | ||
3149 | } | 3152 | } |
3150 | } | 3153 | } |
3151 | 3154 | ||