Convert the slow request queue into a regular queue and add some cleanup

and locking.
avinationmerge
Melanie 2012-07-06 00:23:05 +02:00
parent bf292ce26f
commit b8c2efa49c
1 changed files with 18 additions and 4 deletions

View File

@ -174,7 +174,7 @@ namespace OpenSim.Framework.Servers.HttpServer
private readonly BaseHttpServer m_server; private readonly BaseHttpServer m_server;
private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>(); private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>();
private BlockingQueue<PollServiceHttpRequest> m_slowRequests = new BlockingQueue<PollServiceHttpRequest>(); private static Queue<PollServiceHttpRequest> m_slowRequests = new Queue<PollServiceHttpRequest>();
private static Queue<PollServiceHttpRequest> m_retryRequests = new Queue<PollServiceHttpRequest>(); private static Queue<PollServiceHttpRequest> m_retryRequests = new Queue<PollServiceHttpRequest>();
private uint m_WorkerThreadCount = 0; private uint m_WorkerThreadCount = 0;
@ -229,11 +229,16 @@ namespace OpenSim.Framework.Servers.HttpServer
if (m_running) if (m_running)
{ {
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp) if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp)
{
m_requests.Enqueue(req); m_requests.Enqueue(req);
}
else else
{
lock (m_slowRequests)
m_slowRequests.Enqueue(req); m_slowRequests.Enqueue(req);
} }
} }
}
private void CheckRetries() private void CheckRetries()
{ {
@ -251,11 +256,14 @@ namespace OpenSim.Framework.Servers.HttpServer
{ {
slowCount = 0; slowCount = 0;
while (m_slowRequests.Count() > 0 && m_running) lock (m_slowRequests)
{
while (m_slowRequests.Count > 0 && m_running)
m_requests.Enqueue(m_slowRequests.Dequeue()); m_requests.Enqueue(m_slowRequests.Dequeue());
} }
} }
} }
}
~PollServiceRequestManager() ~PollServiceRequestManager()
{ {
@ -290,6 +298,12 @@ namespace OpenSim.Framework.Servers.HttpServer
PollServiceHttpRequest wreq; PollServiceHttpRequest wreq;
m_retryRequests.Clear(); m_retryRequests.Clear();
lock (m_slowRequests)
{
while (m_slowRequests.Count > 0 && m_running)
m_requests.Enqueue(m_slowRequests.Dequeue());
}
while (m_requests.Count() > 0) while (m_requests.Count() > 0)
{ {
try try