make Caps IDisposable

master
UbitUmarov 2020-04-30 03:37:28 +01:00
parent 36d005e1cc
commit 22c28a0260
3 changed files with 23 additions and 6 deletions

View File

@ -50,7 +50,7 @@ namespace OpenSim.Framework.Capabilities
/// </summary>
public delegate IClientAPI GetClientDelegate(UUID agentID);
public class Caps
public class Caps : IDisposable
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -164,6 +164,23 @@ namespace OpenSim.Framework.Capabilities
m_capsActive = null;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public void Dispose(bool disposing)
{
Flags = CapsFlags.None;
DeregisterHandlers();
if (m_capsActive != null)
{
m_capsActive.Dispose();
m_capsActive = null;
}
}
/// <summary>
/// Register a handler. This allows modules to register handlers.

View File

@ -92,7 +92,7 @@ namespace OpenSim.Region.ClientStack.Linden
{
// m_log.InfoFormat("[OBJECTADD]: {0}", "/CAPS/OA/" + capuuid + "/");
caps.RegisterSimpleHandler("ObjectAdd", new SimpleOSDMapHandler("POST", "/" + UUID.Random().ToString(),
caps.RegisterSimpleHandler("ObjectAdd", new SimpleOSDMapHandler("POST", "/" + UUID.Random(),
delegate (IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, OSDMap map)
{
ProcessAdd(httpRequest, httpResponse, map, agentID);

View File

@ -191,11 +191,11 @@ namespace OpenSim.Region.CoreModules.Framework
lock (m_capsObjects)
{
if (m_capsObjects.ContainsKey(circuitCode))
if (m_capsObjects.TryGetValue(circuitCode, out Caps cp))
{
m_capsObjects[circuitCode].DeregisterHandlers();
m_scene.EventManager.TriggerOnDeregisterCaps(agentId, m_capsObjects[circuitCode]);
m_scene.EventManager.TriggerOnDeregisterCaps(agentId, cp);
m_capsObjects.Remove(circuitCode);
cp.Dispose();
}
else
{
@ -203,9 +203,9 @@ namespace OpenSim.Region.CoreModules.Framework
{
if (kvp.Value.AgentID == agentId)
{
kvp.Value.DeregisterHandlers();
m_scene.EventManager.TriggerOnDeregisterCaps(agentId, kvp.Value);
m_capsObjects.Remove(kvp.Key);
kvp.Value.Dispose();
return;
}
}