diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/ContextTimeoutManager.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/ContextTimeoutManager.cs
index 9dcc13df41..ceea624c31 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/ContextTimeoutManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/ContextTimeoutManager.cs
@@ -121,8 +121,7 @@ namespace OSHttpServer
SocketError disconnectError = SocketError.HostDown;
for (int i = 0; i < m_contexts.Count; i++)
{
- HttpClientContext context = null;
- if (m_contexts.TryDequeue(out context))
+ if (m_contexts.TryDequeue(out HttpClientContext context))
{
try
{
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
index 0d2a6cf6f7..617004079c 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
@@ -91,11 +91,6 @@ namespace OSHttpServer
public bool StopMonitoring;
- ///
- /// Context have been started (a new client have connected)
- ///
- public event EventHandler Started;
-
public IPEndPoint LocalIPEndPoint {get; set;}
///
@@ -213,8 +208,8 @@ namespace OSHttpServer
///
public virtual void Start()
{
- ReceiveLoop();
- Started?.Invoke(this, EventArgs.Empty);
+ Task tk = new Task(() => ReceiveLoop());
+ tk.Start();
}
///
@@ -488,7 +483,6 @@ namespace OSHttpServer
m_waitingResponse = true;
}
- // for now pipeline requests need to be serialized by opensim
if(donow)
RequestReceived?.Invoke(this, new RequestEventArgs(m_currentRequest));
@@ -530,9 +524,14 @@ namespace OSHttpServer
isSendingResponse = false;
m_currentResponse?.Clear();
m_currentResponse = null;
+ lock (m_requestsLock)
+ m_waitingResponse = false;
+
+ if(contextID < 0)
+ return;
bool doclose = ctype == ConnectionType.Close;
- if (doclose)
+ if (doclose)
{
m_isClosing = true;
m_requests.Clear();
@@ -559,19 +558,16 @@ namespace OSHttpServer
return;
TriggerKeepalive = true;
+ HttpRequest nextRequest = null;
lock (m_requestsLock)
{
- m_waitingResponse = false;
if (m_requests != null && m_requests.Count > 0)
- {
- HttpRequest nextRequest = m_requests.Dequeue();
- if (nextRequest != null)
- {
- m_waitingResponse = true;
- RequestReceived?.Invoke(this, new RequestEventArgs(nextRequest));
- }
- }
+ nextRequest = m_requests.Dequeue();
+ if (nextRequest != null && RequestReceived != null)
+ m_waitingResponse = true;
}
+ if (nextRequest != null)
+ RequestReceived?.Invoke(this, new RequestEventArgs(nextRequest));
}
}