change pollService stop() to send 503 error and no keepalive. ( untested )

avinationmerge
UbitUmarov 2015-08-18 23:59:55 +01:00
parent 05d72f77ff
commit 48ef22f62e
2 changed files with 32 additions and 6 deletions

View File

@ -114,7 +114,29 @@ namespace OpenSim.Framework.Servers.HttpServer
PollServiceArgs.RequestsHandled++; PollServiceArgs.RequestsHandled++;
} }
} }
internal void DoHTTPstop(BaseHttpServer server)
{
OSHttpResponse response
= new OSHttpResponse(new HttpResponse(HttpContext, Request), HttpContext);
response.SendChunked = false;
response.ContentLength64 = 0;
response.ContentEncoding = Encoding.UTF8;
response.ReuseContext = false;
response.KeepAlive = false;
response.SendChunked = false;
response.StatusCode = 503;
try
{
response.OutputStream.Flush();
response.Send();
}
catch (Exception e)
{
}
}
} }
class PollServiceHttpRequestComparer : IEqualityComparer<PollServiceHttpRequest> class PollServiceHttpRequestComparer : IEqualityComparer<PollServiceHttpRequest>

View File

@ -204,12 +204,17 @@ namespace OpenSim.Framework.Servers.HttpServer
foreach (Thread t in m_workerThreads) foreach (Thread t in m_workerThreads)
Watchdog.AbortThread(t.ManagedThreadId); Watchdog.AbortThread(t.ManagedThreadId);
// any entry in m_bycontext should have a active request on the other queues
// so just delete contents to easy GC
foreach (Queue<PollServiceHttpRequest> qu in m_bycontext.Values)
qu.Clear();
m_bycontext.Clear();
try try
{ {
foreach (PollServiceHttpRequest req in m_retryRequests) foreach (PollServiceHttpRequest req in m_retryRequests)
{ {
req.DoHTTPGruntWork(m_server, req.DoHTTPstop(m_server);
req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id));
} }
} }
catch catch
@ -221,7 +226,7 @@ namespace OpenSim.Framework.Servers.HttpServer
lock (m_slowRequests) lock (m_slowRequests)
{ {
while (m_slowRequests.Count > 0 && m_running) while (m_slowRequests.Count > 0)
m_requests.Enqueue(m_slowRequests.Dequeue()); m_requests.Enqueue(m_slowRequests.Dequeue());
} }
@ -230,8 +235,7 @@ namespace OpenSim.Framework.Servers.HttpServer
try try
{ {
wreq = m_requests.Dequeue(0); wreq = m_requests.Dequeue(0);
wreq.DoHTTPGruntWork(m_server, wreq.DoHTTPstop(m_server);
wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id));
} }
catch catch
{ {