Merge commit '9ec672c70b28b8c1d6d81bab7744fcf7bf9b83c7' into bigmerge

avinationmerge
Melanie 2011-10-25 03:26:44 +01:00
commit c8dfef1583
4 changed files with 31 additions and 9 deletions

View File

@ -1838,9 +1838,9 @@ namespace OpenSim.Framework.Servers.HttpServer
{ {
lock (m_pollHandlers) lock (m_pollHandlers)
{ {
if (m_pollHandlers.ContainsKey(httpMethod)) if (m_pollHandlers.ContainsKey(path))
{ {
m_pollHandlers.Remove(httpMethod); m_pollHandlers.Remove(path);
} }
} }

View File

@ -28,12 +28,16 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Threading; using System.Threading;
using System.Reflection;
using log4net;
using HttpServer; using HttpServer;
namespace OpenSim.Framework.Servers.HttpServer namespace OpenSim.Framework.Servers.HttpServer
{ {
public class PollServiceRequestManager public class PollServiceRequestManager
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private readonly BaseHttpServer m_server; private readonly BaseHttpServer m_server;
private static Queue m_requests = Queue.Synchronized(new Queue()); private static Queue m_requests = Queue.Synchronized(new Queue());
private uint m_WorkerThreadCount = 0; private uint m_WorkerThreadCount = 0;
@ -42,8 +46,6 @@ namespace OpenSim.Framework.Servers.HttpServer
private Thread m_watcherThread; private Thread m_watcherThread;
private bool m_running = true; private bool m_running = true;
public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout)
{ {
m_server = pSrv; m_server = pSrv;
@ -61,7 +63,6 @@ namespace OpenSim.Framework.Servers.HttpServer
m_workerThreads[i].Name = String.Format("PollServiceWorkerThread{0}",i); m_workerThreads[i].Name = String.Format("PollServiceWorkerThread{0}",i);
//Can't add to thread Tracker here Referencing OpenSim.Framework creates circular reference //Can't add to thread Tracker here Referencing OpenSim.Framework creates circular reference
m_workerThreads[i].Start(); m_workerThreads[i].Start();
} }
//start watcher threads //start watcher threads
@ -98,7 +99,10 @@ namespace OpenSim.Framework.Servers.HttpServer
if (m_requests.Count == 0) if (m_requests.Count == 0)
return; return;
// m_log.DebugFormat("[POLL SERVICE REQUEST MANAGER]: Processing {0} requests", m_requests.Count);
int reqperthread = (int) (m_requests.Count/m_WorkerThreadCount) + 1; int reqperthread = (int) (m_requests.Count/m_WorkerThreadCount) + 1;
// For Each WorkerThread // For Each WorkerThread
for (int tc = 0; tc < m_WorkerThreadCount && m_requests.Count > 0; tc++) for (int tc = 0; tc < m_WorkerThreadCount && m_requests.Count > 0; tc++)
{ {

View File

@ -204,7 +204,7 @@ namespace OpenSim.Region.ClientStack.Linden
private void ClientClosed(UUID AgentID, Scene scene) 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; int count = 0;
while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5) while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5)
@ -216,11 +216,13 @@ namespace OpenSim.Region.ClientStack.Linden
{ {
queues.Remove(AgentID); queues.Remove(AgentID);
} }
List<UUID> removeitems = new List<UUID>(); List<UUID> removeitems = new List<UUID>();
lock (m_AvatarQueueUUIDMapping) lock (m_AvatarQueueUUIDMapping)
{ {
foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys) 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) if (ky == AgentID)
{ {
removeitems.Add(ky); removeitems.Add(ky);
@ -229,11 +231,13 @@ namespace OpenSim.Region.ClientStack.Linden
foreach (UUID ky in removeitems) foreach (UUID ky in removeitems)
{ {
UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky];
m_AvatarQueueUUIDMapping.Remove(ky); m_AvatarQueueUUIDMapping.Remove(ky);
MainServer.Instance.RemovePollServiceHTTPHandler("","/CAPS/EQG/" + ky.ToString() + "/");
}
MainServer.Instance.RemovePollServiceHTTPHandler("","/CAPS/EQG/" + eventQueueGetUuid.ToString() + "/");
}
} }
UUID searchval = UUID.Zero; UUID searchval = UUID.Zero;
removeitems.Clear(); removeitems.Clear();
@ -252,7 +256,6 @@ namespace OpenSim.Region.ClientStack.Linden
foreach (UUID ky in removeitems) foreach (UUID ky in removeitems)
m_QueueUUIDAvatarMapping.Remove(ky); m_QueueUUIDAvatarMapping.Remove(ky);
} }
} }

View File

@ -74,5 +74,20 @@ namespace OpenSim.Region.ClientStack.Linden.Tests
// TODO: Add more assertions for the other aspects of event queues // TODO: Add more assertions for the other aspects of event queues
Assert.That(MainServer.Instance.GetPollServiceHandlerKeys().Count, Is.EqualTo(1)); 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));
}
} }
} }