X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.Net%2FWebConnectionStream.cs;h=87f60363da8a4306b543420ccf085a142b764d2e;hb=20d845ca07479ece43da9e344c060e49887fd369;hp=8ef558d72fd997d284c76319ee04b76159d0b7e6;hpb=7c3c9084583c22ac385de97fb49ba9d53fc51cdf;p=mono.git diff --git a/mcs/class/System/System.Net/WebConnectionStream.cs b/mcs/class/System/System.Net/WebConnectionStream.cs index 8ef558d72fd..87f60363da8 100644 --- a/mcs/class/System/System.Net/WebConnectionStream.cs +++ b/mcs/class/System/System.Net/WebConnectionStream.cs @@ -234,7 +234,8 @@ namespace System.Net return; } - pending.WaitOne (); + if (!pending.WaitOne (ReadTimeout)) + throw new WebException ("The operation has timed out.", WebExceptionStatus.Timeout); lock (locker) { if (totalRead >= contentLength) return; @@ -592,6 +593,14 @@ namespace System.Net if (result.EndCalled) return; + if (sendChunked) { + lock (locker) { + pendingWrites--; + if (pendingWrites <= 0) + pending.Set (); + } + } + result.EndCalled = true; if (result.AsyncWriteAll) { result.WaitUntilComplete (); @@ -605,14 +614,6 @@ namespace System.Net if (result.GotException) throw result.Exception; - - if (sendChunked) { - lock (locker) { - pendingWrites--; - if (pendingWrites == 0) - pending.Set (); - } - } } public override void Write (byte [] buffer, int offset, int size) @@ -775,7 +776,9 @@ namespace System.Net if (disposed) return; disposed = true; - pending.WaitOne (); + if (!pending.WaitOne (WriteTimeout)) { + throw new WebException ("The operation has timed out.", WebExceptionStatus.Timeout); + } byte [] chunk = Encoding.ASCII.GetBytes ("0\r\n\r\n"); string err_msg = null; cnc.Write (request, chunk, 0, chunk.Length, ref err_msg);