Fix bugs in EventQueueGetModule.ClientClosed() and BaseHttpServer.RemovePollServerHTTPHandler() that stopped existing code in ClientClosed() from actually tearing down the poll handler
Actually doing the tear down appear to have no ill effects with region crossing and teleport.0.7.2-post-fixes
parent
aa4637db47
commit
e5286b7b7c
|
@ -1815,9 +1815,9 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
{
|
||||
lock (m_pollHandlers)
|
||||
{
|
||||
if (m_pollHandlers.ContainsKey(httpMethod))
|
||||
if (m_pollHandlers.ContainsKey(path))
|
||||
{
|
||||
m_pollHandlers.Remove(httpMethod);
|
||||
m_pollHandlers.Remove(path);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,12 +28,16 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Threading;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
using HttpServer;
|
||||
|
||||
namespace OpenSim.Framework.Servers.HttpServer
|
||||
{
|
||||
public class PollServiceRequestManager
|
||||
{
|
||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private readonly BaseHttpServer m_server;
|
||||
private static Queue m_requests = Queue.Synchronized(new Queue());
|
||||
private uint m_WorkerThreadCount = 0;
|
||||
|
@ -42,8 +46,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
private Thread m_watcherThread;
|
||||
private bool m_running = true;
|
||||
|
||||
|
||||
|
||||
public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout)
|
||||
{
|
||||
m_server = pSrv;
|
||||
|
@ -61,7 +63,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
m_workerThreads[i].Name = String.Format("PollServiceWorkerThread{0}",i);
|
||||
//Can't add to thread Tracker here Referencing OpenSim.Framework creates circular reference
|
||||
m_workerThreads[i].Start();
|
||||
|
||||
}
|
||||
|
||||
//start watcher threads
|
||||
|
@ -98,7 +99,10 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
if (m_requests.Count == 0)
|
||||
return;
|
||||
|
||||
// m_log.DebugFormat("[POLL SERVICE REQUEST MANAGER]: Processing {0} requests", m_requests.Count);
|
||||
|
||||
int reqperthread = (int) (m_requests.Count/m_WorkerThreadCount) + 1;
|
||||
|
||||
// For Each WorkerThread
|
||||
for (int tc = 0; tc < m_WorkerThreadCount && m_requests.Count > 0; tc++)
|
||||
{
|
||||
|
|
|
@ -205,7 +205,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
private void ClientClosed(UUID AgentID, Scene scene)
|
||||
{
|
||||
//m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName);
|
||||
// m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName);
|
||||
|
||||
int count = 0;
|
||||
while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5)
|
||||
|
@ -217,11 +217,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
{
|
||||
queues.Remove(AgentID);
|
||||
}
|
||||
|
||||
List<UUID> removeitems = new List<UUID>();
|
||||
lock (m_AvatarQueueUUIDMapping)
|
||||
{
|
||||
foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys)
|
||||
{
|
||||
// m_log.DebugFormat("[EVENTQUEUE]: Found key {0} in m_AvatarQueueUUIDMapping while looking for {1}", ky, AgentID);
|
||||
if (ky == AgentID)
|
||||
{
|
||||
removeitems.Add(ky);
|
||||
|
@ -230,11 +232,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
foreach (UUID ky in removeitems)
|
||||
{
|
||||
UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky];
|
||||
m_AvatarQueueUUIDMapping.Remove(ky);
|
||||
MainServer.Instance.RemovePollServiceHTTPHandler("","/CAPS/EQG/" + ky.ToString() + "/");
|
||||
}
|
||||
|
||||
MainServer.Instance.RemovePollServiceHTTPHandler("","/CAPS/EQG/" + eventQueueGetUuid.ToString() + "/");
|
||||
}
|
||||
}
|
||||
|
||||
UUID searchval = UUID.Zero;
|
||||
|
||||
removeitems.Clear();
|
||||
|
@ -253,7 +257,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
foreach (UUID ky in removeitems)
|
||||
m_QueueUUIDAvatarMapping.Remove(ky);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,5 +68,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
|||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RemoveForClient()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
// log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
UUID spId = TestHelpers.ParseTail(0x1);
|
||||
|
||||
SceneHelpers.AddScenePresence(m_scene, spId);
|
||||
m_scene.IncomingCloseAgent(spId);
|
||||
|
||||
// TODO: Add more assertions for the other aspects of event queues
|
||||
Assert.That(MainServer.Instance.GetPollServiceHandlerKeys().Count, Is.EqualTo(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue