@@ -83,12 +83,10 @@ internal sealed class Connection : IConnection
83
83
//
84
84
// Heartbeats
85
85
//
86
-
87
86
private TimeSpan _heartbeat = TimeSpan . Zero ;
88
87
private TimeSpan _heartbeatTimeSpan = TimeSpan . FromSeconds ( 0 ) ;
89
88
private int _missedHeartbeats ;
90
- private int _heartbeatCounter ;
91
- private int _lastHeartbeatCounter ;
89
+ private bool _heartbeatDetected ;
92
90
93
91
private Timer _heartbeatWriteTimer ;
94
92
private Timer _heartbeatReadTimer ;
@@ -616,14 +614,9 @@ public void MainLoopIteration()
616
614
}
617
615
}
618
616
619
- public void NotifyHeartbeatListener ( )
617
+ private void NotifyHeartbeatListener ( )
620
618
{
621
- // https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/checked-and-unchecked
622
- // No worries if this overflows. What matters is that the value changes.
623
- unchecked
624
- {
625
- _heartbeatCounter ++ ;
626
- }
619
+ _heartbeatDetected = true ;
627
620
}
628
621
629
622
public void NotifyReceivedCloseOk ( )
@@ -850,17 +843,16 @@ public void HeartbeatReadTimerCallback(object state)
850
843
{
851
844
if ( ! _closed )
852
845
{
853
- if ( _lastHeartbeatCounter == _heartbeatCounter )
846
+ if ( _heartbeatDetected )
854
847
{
855
- _missedHeartbeats ++ ;
848
+ _heartbeatDetected = false ;
849
+ _missedHeartbeats = 0 ;
856
850
}
857
851
else
858
852
{
859
- _missedHeartbeats = 0 ;
853
+ _missedHeartbeats ++ ;
860
854
}
861
855
862
- _lastHeartbeatCounter = _heartbeatCounter ;
863
-
864
856
// We check against 8 = 2 * 4 because we need to wait for at
865
857
// least two complete heartbeat setting intervals before
866
858
// complaining, and we've set the socket timeout to a quarter
@@ -926,7 +918,7 @@ public void HeartbeatWriteTimerCallback(object state)
926
918
}
927
919
}
928
920
929
- void MaybeStopHeartbeatTimers ( )
921
+ private void MaybeStopHeartbeatTimers ( )
930
922
{
931
923
NotifyHeartbeatListener ( ) ;
932
924
_heartbeatReadTimer ? . Dispose ( ) ;
0 commit comments