From 8258d300e2537d813f03b83610465a099cf3baf3 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Thu, 13 Apr 2017 09:29:43 -0700 Subject: [PATCH] Small tweaks to timer logic (#1668) - Avoid null refs in tests by ignoring null IKestrelTrace - Use a static callback for the timer callback Fixes #1667 --- .../Internal/Infrastructure/Heartbeat.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Heartbeat.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Heartbeat.cs index 089b779e92..94e58d8ea8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Heartbeat.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Heartbeat.cs @@ -32,9 +32,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure _trace = trace; _timer = new Timer(OnHeartbeat, state: this, dueTime: _interval, period: _interval); } + + private static void OnHeartbeat(object state) + { + ((Heartbeat)state).OnHeartbeat(); + } // Called by the Timer (background) thread - private void OnHeartbeat(object state) + private void OnHeartbeat() { var now = _systemClock.UtcNow; @@ -58,7 +63,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure } else { - _trace.TimerSlow(_interval, now); + // Tests usually pass in a null trace + _trace?.TimerSlow(_interval, now); } }