From 88ca1ae1c1f0bbd3964de5c88dcffbaa795c3417 Mon Sep 17 00:00:00 2001 From: lateralusX Date: Tue, 8 Jun 2021 19:39:21 +0200 Subject: [PATCH] Fix infinite loop in counter groups OnTimer. If a counter event source is disabled while in OnTimer, thread could end up in infinite loop. This happens since _pollingIntervalInMilliseconds is set to 0 when disabled, meaning that we could fail to advance _nextPollingTimeStamp past now. Fix makes sure it always gets advance event, even if _pollingIntervalInMilliseconds to 0. --- .../src/System/Diagnostics/Tracing/CounterGroup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs index 5d85b20e7b6bf7..238dc7eb7593e1 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs @@ -253,7 +253,7 @@ private void OnTimer() _timeStampSinceCollectionStarted = now; do { - _nextPollingTimeStamp += new TimeSpan(0, 0, 0, 0, _pollingIntervalInMilliseconds); + _nextPollingTimeStamp += new TimeSpan(0, 0, 0, 0, (_pollingIntervalInMilliseconds > 0) ? _pollingIntervalInMilliseconds : 1); } while (_nextPollingTimeStamp <= now); } }