aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
authorTeravus Ovares2009-07-30 18:16:00 +0000
committerTeravus Ovares2009-07-30 18:16:00 +0000
commit23a8895d293f33e8dfcc4aaf56c6fcb49106e979 (patch)
tree93a1384385a114b8286a4be173d2dde423c457f1 /OpenSim/Framework
parentThank you, dmiles, for a patch that allows more differentiated script (diff)
downloadopensim-SC_OLD-23a8895d293f33e8dfcc4aaf56c6fcb49106e979.zip
opensim-SC_OLD-23a8895d293f33e8dfcc4aaf56c6fcb49106e979.tar.gz
opensim-SC_OLD-23a8895d293f33e8dfcc4aaf56c6fcb49106e979.tar.bz2
opensim-SC_OLD-23a8895d293f33e8dfcc4aaf56c6fcb49106e979.tar.xz
* Fixed another potential httpserver leak.
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs7
-rw-r--r--OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs19
-rw-r--r--OpenSim/Framework/Servers/Tests/OSHttpTests.cs1
3 files changed, 26 insertions, 1 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index d268457..fbd7166 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -1321,6 +1321,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1321 string responseString = (string)responsedata["str_response_string"]; 1321 string responseString = (string)responsedata["str_response_string"];
1322 string contentType = (string)responsedata["content_type"]; 1322 string contentType = (string)responsedata["content_type"];
1323 1323
1324
1324 if (responsedata.ContainsKey("error_status_text")) 1325 if (responsedata.ContainsKey("error_status_text"))
1325 { 1326 {
1326 response.StatusDescription = (string)responsedata["error_status_text"]; 1327 response.StatusDescription = (string)responsedata["error_status_text"];
@@ -1336,6 +1337,10 @@ namespace OpenSim.Framework.Servers.HttpServer
1336 response.KeepAlive = keepalive; 1337 response.KeepAlive = keepalive;
1337 1338
1338 } 1339 }
1340
1341 if (responsedata.ContainsKey("reusecontext"))
1342 response.ReuseContext = (bool) responsedata["reusecontext"];
1343
1339 //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this 1344 //Even though only one other part of the entire code uses HTTPHandlers, we shouldn't expect this
1340 //and should check for NullReferenceExceptions 1345 //and should check for NullReferenceExceptions
1341 1346
@@ -1391,7 +1396,7 @@ namespace OpenSim.Framework.Servers.HttpServer
1391 response.OutputStream.Flush(); 1396 response.OutputStream.Flush();
1392 response.Send(); 1397 response.Send();
1393 1398
1394 if (!response.KeepAlive) 1399 if (!response.KeepAlive && response.ReuseContext)
1395 response.FreeContext(); 1400 response.FreeContext();
1396 } 1401 }
1397 catch (SocketException e) 1402 catch (SocketException e)
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
index 6c90a92..7029289 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs
@@ -256,6 +256,25 @@ namespace OpenSim.Framework.Servers.HttpServer
256 } 256 }
257 } 257 }
258 258
259 public bool ReuseContext
260 {
261 get
262 {
263 if (_httpClientContext != null)
264 {
265 return !_httpClientContext.EndWhenDone;
266 }
267 return true;
268 }
269 set
270 {
271 if (_httpClientContext != null)
272 {
273 _httpClientContext.EndWhenDone = !value;
274 }
275 }
276 }
277
259 278
260 protected IHttpResponse _httpResponse; 279 protected IHttpResponse _httpResponse;
261 private IHttpClientContext _httpClientContext; 280 private IHttpClientContext _httpClientContext;
diff --git a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs
index a6a90dc..e62407a 100644
--- a/OpenSim/Framework/Servers/Tests/OSHttpTests.cs
+++ b/OpenSim/Framework/Servers/Tests/OSHttpTests.cs
@@ -68,6 +68,7 @@ namespace OpenSim.Framework.Servers.Tests
68 public void Send(byte[] buffer, int offset, int size) {} 68 public void Send(byte[] buffer, int offset, int size) {}
69 public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType) {} 69 public void Respond(string httpVersion, HttpStatusCode statusCode, string reason, string body, string contentType) {}
70 public void Close() { } 70 public void Close() { }
71 public bool EndWhenDone { get { return false;} set { return;}}
71 72
72 public event EventHandler<DisconnectedEventArgs> Disconnected = delegate { }; 73 public event EventHandler<DisconnectedEventArgs> Disconnected = delegate { };
73 /// <summary> 74 /// <summary>