diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index d268457689..fbd71667a8 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -1321,6 +1321,7 @@ namespace OpenSim.Framework.Servers.HttpServer string responseString = (string)responsedata["str_response_string"]; string contentType = (string)responsedata["content_type"]; + if (responsedata.ContainsKey("error_status_text")) { response.StatusDescription = (string)responsedata["error_status_text"]; @@ -1336,6 +1337,10 @@ namespace OpenSim.Framework.Servers.HttpServer response.KeepAlive = keepalive; } + + if (responsedata.ContainsKey("reusecontext")) + response.ReuseContext = (bool) responsedata["reusecontext"]; + //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this //and should check for NullReferenceExceptions @@ -1391,7 +1396,7 @@ namespace OpenSim.Framework.Servers.HttpServer response.OutputStream.Flush(); response.Send(); - if (!response.KeepAlive) + if (!response.KeepAlive && response.ReuseContext) response.FreeContext(); } catch (SocketException e) diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs index 6c90a92fdc..702928992a 100644 --- a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs +++ b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs @@ -256,6 +256,25 @@ namespace OpenSim.Framework.Servers.HttpServer } } + public bool ReuseContext + { + get + { + if (_httpClientContext != null) + { + return !_httpClientContext.EndWhenDone; + } + return true; + } + set + { + if (_httpClientContext != null) + { + _httpClientContext.EndWhenDone = !value; + } + } + } + protected IHttpResponse _httpResponse; private IHttpClientContext _httpClientContext; diff --git a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs index a6a90dc71e..e62407adfa 100644 --- a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs +++ b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs @@ -68,6 +68,7 @@ namespace OpenSim.Framework.Servers.Tests public void Send(byte[] buffer, int offset, int size) {} public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType) {} public void Close() { } + public bool EndWhenDone { get { return false;} set { return;}} public event EventHandler Disconnected = delegate { }; /// diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index c064df1121..3f0570ec8b 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs @@ -375,7 +375,8 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; responsedata["content_type"] = "application/xml"; - responsedata["keepalive"] = true; + responsedata["keepalive"] = false; + responsedata["reusecontext"] = false; responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); return responsedata; //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); @@ -386,7 +387,8 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 502; responsedata["content_type"] = "text/plain"; - responsedata["keepalive"] = true; + responsedata["keepalive"] = false; + responsedata["reusecontext"] = false; responsedata["str_response_string"] = "Upstream error: "; responsedata["error_status_text"] = "Upstream error:"; responsedata["http_protocol_version"] = "HTTP/1.0"; diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index 42b0d86dea..3933968d92 100644 Binary files a/bin/HttpServer_OpenSim.dll and b/bin/HttpServer_OpenSim.dll differ diff --git a/bin/HttpServer_OpenSim.pdb b/bin/HttpServer_OpenSim.pdb index 0c9e1f488f..41a152adaf 100644 Binary files a/bin/HttpServer_OpenSim.pdb and b/bin/HttpServer_OpenSim.pdb differ