[mono/xsp] [2 commits] d812716e: [FastCgi] Fix bug with big responses

"Miguel de Icaza ([email protected])" <[email protected]>
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <00000141a3beb7f0-99545587-2785-4c69-b2e0-5ca42ceedbc7-000000@email.amazonses.com>
   Branch: refs/heads/master
     Home: https://github.com/mono/xsp
  Compare: https://github.com/mono/xsp/compare/5297b2c62818...6739dd07ec52

   Commit: d812716e7f3f1670e200bdeadff228543227f94a
   Author: Leonardo Taglialegne <[email protected]> (miniBill)
     Date: 2013-10-05 20:48:57 GMT
      URL: https://github.com/mono/xsp/commit/d812716e7f3f1670e200bdeadff228543227f94a

[FastCgi] Fix bug with big responses

Changed paths:
  M src/Mono.WebServer.FastCgi/Buffers.cs
  M src/Mono.WebServer.FastCgi/Connection.cs

Modified: src/Mono.WebServer.FastCgi/Buffers.cs
===================================================================
@@ -31,7 +31,7 @@
 
 namespace Mono.WebServer.FastCgi
 {
-	public struct Buffers
+	public class Buffers
 	{
 		public CompatArraySegment<byte>? Header { get; private set; }
 		public CompatArraySegment<byte>? Body { get; private set; }
@@ -40,8 +40,11 @@ public struct Buffers
 		readonly BufferManager bigBufferManager;
 		readonly BufferManager smallBufferManager;
 
+		public Buffers ()
+		{
+		}
+
 		public Buffers (BufferManager bigBufferManager, BufferManager smallBufferManager)
-			: this ()
 		{
 			if (bigBufferManager == null)
 				throw new ArgumentNullException ("bigBufferManager");
@@ -55,7 +58,7 @@ public Buffers (BufferManager bigBufferManager, BufferManager smallBufferManager
 			Padding = smallBufferManager.ClaimBuffer ();
 		}
 
-		public Buffers (byte[] buffer, int headerSize, int bodySize) : this ()
+		public Buffers (byte[] buffer, int headerSize, int bodySize)
 		{
 			Header = MaybeSegment (buffer, 0, headerSize);
 			Body = MaybeSegment (buffer, headerSize, bodySize);
@@ -79,6 +82,7 @@ public CompatArraySegment<byte> EnforceBodyLength (int length)
 					bigBufferManager.ReturnBuffer (Body.Value);
 				Body = new CompatArraySegment<byte> (new byte[length]);
 			}
+
 			return Body.Value;
 		}
 
@@ -94,9 +98,7 @@ public CompatArraySegment<byte> EnforcePaddingLength (int length)
 
 		static CompatArraySegment<byte>? MaybeSegment (byte[] buffer, int offset)
 		{
-			if (buffer == null)
-				return null;
-			return MaybeSegment (buffer, offset, buffer.Length - offset);
+			return buffer == null ? null : MaybeSegment (buffer, offset, buffer.Length - offset);
 		}
 
 		static CompatArraySegment<byte>? MaybeSegment (byte[] buffer, int offset, int count)

Modified: src/Mono.WebServer.FastCgi/Connection.cs
===================================================================
@@ -31,6 +31,7 @@
 using Mono.WebServer.Log;
 using Mono.WebServer.FastCgi;
 using NRecord = Mono.WebServer.FastCgi.Record;
+using Mono.WebServer.FastCgi.Compatibility;
 
 namespace Mono.FastCgi {
 	public class Connection
@@ -337,8 +338,8 @@ void HandleBeginRequest (Request request, NRecord record)
 			if (IsConnected)
 				lock (send_lock) {
 					try {
-						send_buffers.EnforceBodyLength(bodyLength);
-						Array.Copy(bodyData, bodyIndex, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyLength);
+						CompatArraySegment<byte> body = send_buffers.EnforceBodyLength(bodyLength);
+						Array.Copy(bodyData, bodyIndex, body.Array, body.Offset, bodyLength);
 						var record = new NRecord (1, type, requestID, bodyLength, send_buffers);
 						record.Send (socket);
 					} catch (System.Net.Sockets.SocketException) {
@@ -353,8 +354,8 @@ void HandleBeginRequest (Request request, NRecord record)
 			try {	
 				if (IsConnected) {
 					byte[] bodyData = body.GetData ();
-					send_buffers.EnforceBodyLength(bodyData.Length);
-					Array.Copy(bodyData, 0, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyData.Length);
+					CompatArraySegment<byte> bodyBuffer = send_buffers.EnforceBodyLength(bodyData.Length);
+					Array.Copy(bodyData, 0, bodyBuffer.Array, bodyBuffer.Offset, bodyData.Length);
 					var record = new NRecord (1, RecordType.EndRequest, requestID, bodyData.Length, send_buffers);
 					record.Send (socket);
 				}

   Commit: 6739dd07ec52d8f3fb37109739a95f1dabc384b6
   Author: Miguel de Icaza <[email protected]> (migueldeicaza)
     Date: 2013-10-10 18:59:20 GMT
      URL: https://github.com/mono/xsp/commit/6739dd07ec52d8f3fb37109739a95f1dabc384b6

Merge pull request #63 from miniBill/master

[FastCgi] Fix bug with big responses

Changed paths:
  M src/Mono.WebServer.FastCgi/Buffers.cs
  M src/Mono.WebServer.FastCgi/Connection.cs

Modified: src/Mono.WebServer.FastCgi/Buffers.cs
===================================================================
@@ -31,7 +31,7 @@
 
 namespace Mono.WebServer.FastCgi
 {
-	public struct Buffers
+	public class Buffers
 	{
 		public CompatArraySegment<byte>? Header { get; private set; }
 		public CompatArraySegment<byte>? Body { get; private set; }
@@ -40,8 +40,11 @@ public struct Buffers
 		readonly BufferManager bigBufferManager;
 		readonly BufferManager smallBufferManager;
 
+		public Buffers ()
+		{
+		}
+
 		public Buffers (BufferManager bigBufferManager, BufferManager smallBufferManager)
-			: this ()
 		{
 			if (bigBufferManager == null)
 				throw new ArgumentNullException ("bigBufferManager");
@@ -55,7 +58,7 @@ public Buffers (BufferManager bigBufferManager, BufferManager smallBufferManager
 			Padding = smallBufferManager.ClaimBuffer ();
 		}
 
-		public Buffers (byte[] buffer, int headerSize, int bodySize) : this ()
+		public Buffers (byte[] buffer, int headerSize, int bodySize)
 		{
 			Header = MaybeSegment (buffer, 0, headerSize);
 			Body = MaybeSegment (buffer, headerSize, bodySize);
@@ -79,6 +82,7 @@ public CompatArraySegment<byte> EnforceBodyLength (int length)
 					bigBufferManager.ReturnBuffer (Body.Value);
 				Body = new CompatArraySegment<byte> (new byte[length]);
 			}
+
 			return Body.Value;
 		}
 
@@ -94,9 +98,7 @@ public CompatArraySegment<byte> EnforcePaddingLength (int length)
 
 		static CompatArraySegment<byte>? MaybeSegment (byte[] buffer, int offset)
 		{
-			if (buffer == null)
-				return null;
-			return MaybeSegment (buffer, offset, buffer.Length - offset);
+			return buffer == null ? null : MaybeSegment (buffer, offset, buffer.Length - offset);
 		}
 
 		static CompatArraySegment<byte>? MaybeSegment (byte[] buffer, int offset, int count)

Modified: src/Mono.WebServer.FastCgi/Connection.cs
===================================================================
@@ -31,6 +31,7 @@
 using Mono.WebServer.Log;
 using Mono.WebServer.FastCgi;
 using NRecord = Mono.WebServer.FastCgi.Record;
+using Mono.WebServer.FastCgi.Compatibility;
 
 namespace Mono.FastCgi {
 	public class Connection
@@ -337,8 +338,8 @@ void HandleBeginRequest (Request request, NRecord record)
 			if (IsConnected)
 				lock (send_lock) {
 					try {
-						send_buffers.EnforceBodyLength(bodyLength);
-						Array.Copy(bodyData, bodyIndex, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyLength);
+						CompatArraySegment<byte> body = send_buffers.EnforceBodyLength(bodyLength);
+						Array.Copy(bodyData, bodyIndex, body.Array, body.Offset, bodyLength);
 						var record = new NRecord (1, type, requestID, bodyLength, send_buffers);
 						record.Send (socket);
 					} catch (System.Net.Sockets.SocketException) {
@@ -353,8 +354,8 @@ void HandleBeginRequest (Request request, NRecord record)
 			try {	
 				if (IsConnected) {
 					byte[] bodyData = body.GetData ();
-					send_buffers.EnforceBodyLength(bodyData.Length);
-					Array.Copy(bodyData, 0, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyData.Length);
+					CompatArraySegment<byte> bodyBuffer = send_buffers.EnforceBodyLength(bodyData.Length);
+					Array.Copy(bodyData, 0, bodyBuffer.Array, bodyBuffer.Offset, bodyData.Length);
 					var record = new NRecord (1, RecordType.EndRequest, requestID, bodyData.Length, send_buffers);
 					record.Send (socket);
 				}


_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.