diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index fefa242a18..7ec813f6b7 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -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); } } diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index e7a64f7e3a..0840a9db7d 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs @@ -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++) { diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 3eb2b5e90b..7d73b3e7ae 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs @@ -204,7 +204,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) @@ -216,11 +216,13 @@ namespace OpenSim.Region.ClientStack.Linden { queues.Remove(AgentID); } + List removeitems = new List(); 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); @@ -229,11 +231,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(); @@ -252,7 +256,6 @@ namespace OpenSim.Region.ClientStack.Linden foreach (UUID ky in removeitems) m_QueueUUIDAvatarMapping.Remove(ky); - } } diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs index ec8a414489..2ca02c5c57 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs @@ -74,5 +74,20 @@ namespace OpenSim.Region.ClientStack.Linden.Tests // TODO: Add more assertions for the other aspects of event queues Assert.That(MainServer.Instance.GetPollServiceHandlerKeys().Count, Is.EqualTo(1)); } + + [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)); + } } } \ No newline at end of file