Hi all, First time mono-devel poster. I was working with bitsharp and discovered a bug in the TimeoutDispatcher [1] that coverts it into a cpu intensive spinwait. It is also present in another variation in the UPNP library[2]
Currently (line 154): ------------ TimeSpan interval = hasItem ? item.Trigger - DateTime.UtcNow : TimeSpan.FromMilliseconds (-1); if (interval < TimeSpan.Zero) { interval = TimeSpan.Zero; } if (!wait.WaitOne (interval, false) && hasItem) { ..... Issue: The AutoResetEvent interval is never set to -1 (infinite wait) because of the < zero check. This makes the TimeoutDispatcher a spinwait if there are no items in the queue. Solution: The Zero check should only be performed if there is an item in the dispatcher that has set the interval time. Something along the lines of: TimeSpan interval = TimeSpan.FromMilliseconds(-1); if (hasItem) { interval = item.Trigger - DateTime.UtcNow; if (interval < TimeSpan.Zero) { interval = TimeSpan.Zero; } } Please let me know if you need any more information. Cheers! Dan [1] http://github.com/mono/bitsharp/blob/master/src/MonoTorrent/MonoTorrent.Common/TimeoutDispatcher.cs [2] http://github.com/mono/mono-upnp/blob/master/src/Mono.Ssdp/Mono.Ssdp/Mono.Ssdp.Internal/TimeoutDispatcher.cs -- Dan Smith +1 608-213-2867 Algenta Technologies, LLC http://www.algenta.com http://www.colectica.com _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list