Merge pull request #2152 from joelmartinez/mdoc-preserver
[mono.git] / mcs / class / System / System.Net / ResponseStream.cs
index 6551ce89a859b1e8f9844596f6392d2926f923a9..860509b9aceaa2776fb0bb105699e7a0d6fa528e 100644 (file)
@@ -26,7 +26,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0 && SECURITY_DEP
+#if SECURITY_DEP
 
 using System.IO;
 using System.Net.Sockets;
@@ -79,8 +79,8 @@ namespace System.Net {
                        if (disposed == false) {
                                disposed = true;
                                byte [] bytes = null;
-                               bool chunked = response.SendChunked;
                                MemoryStream ms = GetHeaders (true);
+                               bool chunked = response.SendChunked;
                                if (ms != null) {
                                        long start = ms.Position;
                                        if (chunked && !trailer_sent) {
@@ -101,11 +101,14 @@ namespace System.Net {
 
                MemoryStream GetHeaders (bool closing)
                {
-                       if (response.HeadersSent)
-                               return null;
-                       MemoryStream ms = new MemoryStream ();
-                       response.SendHeaders (closing, ms);
-                       return ms;
+                       // SendHeaders works on shared headers
+                       lock (response.headers_lock) {
+                               if (response.HeadersSent)
+                                       return null;
+                               MemoryStream ms = new MemoryStream ();
+                               response.SendHeaders (closing, ms);
+                               return ms;
+                       }
                }
 
                public override void Flush ()
@@ -135,9 +138,9 @@ namespace System.Net {
                        if (disposed)
                                throw new ObjectDisposedException (GetType ().ToString ());
 
-                       bool chunked = response.SendChunked;
                        byte [] bytes = null;
                        MemoryStream ms = GetHeaders (false);
+                       bool chunked = response.SendChunked;
                        if (ms != null) {
                                long start = ms.Position; // After the possible preamble for the encoding
                                ms.Position = ms.Length;
@@ -170,9 +173,9 @@ namespace System.Net {
                        if (disposed)
                                throw new ObjectDisposedException (GetType ().ToString ());
 
-                       bool chunked = response.SendChunked;
                        byte [] bytes = null;
                        MemoryStream ms = GetHeaders (false);
+                       bool chunked = response.SendChunked;
                        if (ms != null) {
                                long start = ms.Position;
                                ms.Position = ms.Length;