Treat TimeSpan.MaxValue as a special case for http wait timeout
authorDavid Straw <strawd@hp>
Wed, 11 Jul 2012 19:37:53 +0000 (13:37 -0600)
committerDavid Straw <strawd@hp>
Wed, 11 Jul 2012 19:37:53 +0000 (13:37 -0600)
mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpChannelListener.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels.Http/HttpListenerManager.cs

index 17d5d814cab8d04b8af4dd97739d97f1252ff216..895cf92ffbdd9d8773b7887b82e961680e4cd064 100644 (file)
@@ -88,9 +88,11 @@ namespace System.ServiceModel.Channels.Http
                        // HTTP channel could be accepted while there is no incoming request yet. The reply channel waits for the actual request.
                        // HTTP channel listeners do not accept more than one channel at a time.
                        DateTime start = DateTime.Now;
-                       TimeSpan waitTimeout = timeout - (DateTime.Now - start);
-                       if (waitTimeout.TotalMilliseconds > int.MaxValue)
-                               waitTimeout = TimeSpan.FromMilliseconds (int.MaxValue);
+                       TimeSpan waitTimeout;
+                       if (timeout == TimeSpan.MaxValue)
+                               waitTimeout = TimeSpan.FromMilliseconds(int.MaxValue);
+                       else
+                               waitTimeout = timeout - (DateTime.Now - start);
                        accept_channel_handle.WaitOne (waitTimeout);
                        accept_channel_handle.Reset (); 
                        TChannel ch = CreateChannel (timeout - (DateTime.Now - start));
index 7d7759f08d1a3f3360034ea31a0343838fb0dd25..2c6c1a803bf0b2a5913b86b662dca67659587740 100644 (file)
@@ -97,7 +97,7 @@ namespace System.ServiceModel.Channels.Http
                                var q = ce.ContextQueue;
                                if (q.Count == 0) {
                                        TimeSpan waitTimeout = timeout;
-                                       if (waitTimeout.TotalMilliseconds > int.MaxValue)
+                                       if (timeout == TimeSpan.MaxValue)
                                                waitTimeout = TimeSpan.FromMilliseconds (int.MaxValue);
                                        bool ret = ce.WaitHandle.WaitOne (waitTimeout);
                                        return ret && TryDequeueRequest (channel, timeout - (DateTime.Now - start), out context); // recurse, am lazy :/