From 5fc36059552231ac5f79592f7d1845643dd89524 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 30 Dec 2016 07:15:28 +0000 Subject: [PATCH] some cleanup, use more using(), more checks so http request mem stream is closed --- .../Servers/HttpServer/BaseHttpServer.cs | 69 +++++++----------- bin/HttpServer_OpenSim.dll | Bin 119808 -> 119808 bytes bin/HttpServer_OpenSim.pdb | Bin 327168 -> 327168 bytes 3 files changed, 27 insertions(+), 42 deletions(-) diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index d7e5123bf6..9c6ee9cbf7 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs @@ -529,14 +529,10 @@ namespace OpenSim.Framework.Servers.HttpServer if (psEvArgs.Request != null) { OSHttpRequest req = new OSHttpRequest(context, request); - - Stream requestStream = req.InputStream; - + string requestBody = String.Empty; Encoding encoding = Encoding.UTF8; - StreamReader reader = new StreamReader(requestStream, encoding); - - string requestBody = reader.ReadToEnd(); - reader.Close(); + using(StreamReader reader = new StreamReader(req.InputStream, encoding)) + requestBody = reader.ReadToEnd(); Hashtable keysvals = new Hashtable(); Hashtable headervals = new Hashtable(); @@ -630,6 +626,8 @@ namespace OpenSim.Framework.Servers.HttpServer byte[] buffer500 = SendHTML500(response); response.OutputStream.Write(buffer500, 0, buffer500.Length); response.Send(); + if(request.InputStream.CanRead) + request.InputStream.Close(); } catch { @@ -674,7 +672,6 @@ namespace OpenSim.Framework.Servers.HttpServer // } // } - //response.KeepAlive = true; response.SendChunked = false; string path = request.RawUrl; @@ -698,15 +695,10 @@ namespace OpenSim.Framework.Servers.HttpServer { //m_log.Debug("[BASE HTTP SERVER]: Found Caps based HTTP Handler"); IGenericHTTPHandler HTTPRequestHandler = requestHandler as IGenericHTTPHandler; - Stream requestStream = request.InputStream; - + string requestBody = String.Empty; Encoding encoding = Encoding.UTF8; - StreamReader reader = new StreamReader(requestStream, encoding); - - string requestBody = reader.ReadToEnd(); - - reader.Close(); - //requestStream.Close(); + using(StreamReader reader = new StreamReader(request.InputStream, encoding)) + requestBody = reader.ReadToEnd(); Hashtable keysvals = new Hashtable(); Hashtable headervals = new Hashtable(); @@ -746,7 +738,6 @@ namespace OpenSim.Framework.Servers.HttpServer else { IStreamHandler streamHandler = (IStreamHandler)requestHandler; - using (MemoryStream memoryStream = new MemoryStream()) { streamHandler.Handle(path, request.InputStream, memoryStream, request, response); @@ -823,8 +814,6 @@ namespace OpenSim.Framework.Servers.HttpServer } } - request.InputStream.Close(); - if (buffer != null) { if (WebUtil.DebugLevel >= 5) @@ -856,10 +845,6 @@ namespace OpenSim.Framework.Servers.HttpServer requestEndTick = Environment.TickCount; response.Send(); - - //response.OutputStream.Close(); - - //response.FreeContext(); } catch (SocketException e) { @@ -891,6 +876,9 @@ namespace OpenSim.Framework.Servers.HttpServer } finally { + if(request.InputStream.CanRead) + request.InputStream.Close(); + // Every month or so this will wrap and give bad numbers, not really a problem // since its just for reporting int tickdiff = requestEndTick - requestStartTick; @@ -1148,9 +1136,10 @@ namespace OpenSim.Framework.Servers.HttpServer } finally { - if (innerStream != null) + if (innerStream != null && innerStream.CanRead) innerStream.Dispose(); - requestStream.Dispose(); + if (requestStream.CanRead) + requestStream.Dispose(); } //m_log.Debug(requestBody); @@ -1407,15 +1396,15 @@ namespace OpenSim.Framework.Servers.HttpServer //m_log.Warn("[BASE HTTP SERVER]: We've figured out it's a LLSD Request"); Stream requestStream = request.InputStream; + string requestBody = string.Empty; Encoding encoding = Encoding.UTF8; - StreamReader reader = new StreamReader(requestStream, encoding); + using(StreamReader reader = new StreamReader(requestStream,encoding)) + requestBody = reader.ReadToEnd(); - string requestBody = reader.ReadToEnd(); - reader.Close(); - requestStream.Close(); + if(requestStream.CanRead) + requestStream.Close(); //m_log.DebugFormat("[OGP]: {0}:{1}", request.RawUrl, requestBody); - response.KeepAlive = true; OSD llsdRequest = null; OSD llsdResponse = null; @@ -1736,15 +1725,12 @@ namespace OpenSim.Framework.Servers.HttpServer byte[] buffer; Stream requestStream = request.InputStream; - + string requestBody = string.Empty; Encoding encoding = Encoding.UTF8; - StreamReader reader = new StreamReader(requestStream, encoding); - - string requestBody = reader.ReadToEnd(); - // avoid warning for now - reader.ReadToEnd(); - reader.Close(); - requestStream.Close(); + using(StreamReader reader = new StreamReader(requestStream,encoding)) + requestBody = reader.ReadToEnd(); + if(requestStream.CanRead) + requestStream.Close(); Hashtable keysvals = new Hashtable(); Hashtable headervals = new Hashtable(); @@ -2283,10 +2269,9 @@ namespace OpenSim.Framework.Servers.HttpServer string file = Path.Combine(".", "http_500.html"); if (!File.Exists(file)) return getDefaultHTTP500(); - - StreamReader sr = File.OpenText(file); - string result = sr.ReadToEnd(); - sr.Close(); + string result = string.Empty; + using(StreamReader sr = File.OpenText(file)) + result = sr.ReadToEnd(); return result; } diff --git a/bin/HttpServer_OpenSim.dll b/bin/HttpServer_OpenSim.dll index 8b836342cf6ca220725e0691d89081bd61caad67..33a1211333c56c9691c9e4a0f8ad8d14c55ba866 100755 GIT binary patch delta 6813 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