diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/Scene.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index ba8a356..957c75c 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -1867,8 +1867,25 @@ namespace OpenSim.Region.Environment.Scenes | |||
1867 | /// <param name="agentId"></param> | 1867 | /// <param name="agentId"></param> |
1868 | /// <param name="capsObjectPath"></param> | 1868 | /// <param name="capsObjectPath"></param> |
1869 | public void AddCapsHandler(LLUUID agentId) | 1869 | public void AddCapsHandler(LLUUID agentId) |
1870 | { | 1870 | { |
1871 | String capsObjectPath = GetCapsPath(agentId); | 1871 | // Here we clear out old Caps handlers for the agent |
1872 | // this is required because we potentially have multiple simulators in an instance nearby. | ||
1873 | Caps oldcap = null; | ||
1874 | lock (m_capsHandlers) | ||
1875 | { | ||
1876 | if (m_capsHandlers.ContainsKey(agentId)) | ||
1877 | oldcap = m_capsHandlers[agentId]; | ||
1878 | } | ||
1879 | if (oldcap != null) | ||
1880 | { | ||
1881 | oldcap.DeregisterHandlers(); | ||
1882 | } | ||
1883 | |||
1884 | // Generate a new base caps path LLUUID.Random().ToString() instead of agentId.ToString() | ||
1885 | // If the caps paths are not different for each region, the client and sim will do weird | ||
1886 | // things like send the request to a region the agent is no longer in. | ||
1887 | |||
1888 | String capsObjectPath = GetNewCapsPath(agentId); | ||
1872 | 1889 | ||
1873 | m_log.DebugFormat( | 1890 | m_log.DebugFormat( |
1874 | "[CAPS]: Setting up CAPS handler for root agent {0} in {1}", | 1891 | "[CAPS]: Setting up CAPS handler for root agent {0} in {1}", |