@@ -89,6 +89,8 @@ private void CheckForReadDataRateTimeout(long timestamp)
89
89
return ;
90
90
}
91
91
92
+ var timeout = false ;
93
+
92
94
lock ( _readTimingLock )
93
95
{
94
96
if ( ! _readTimingEnabled )
@@ -105,10 +107,7 @@ private void CheckForReadDataRateTimeout(long timestamp)
105
107
var elapsedSeconds = ( double ) _readTimingElapsedTicks / TimeSpan . TicksPerSecond ;
106
108
var rate = _readTimingBytesRead / elapsedSeconds ;
107
109
108
- if ( rate < _minReadRate . BytesPerSecond && ! Debugger . IsAttached )
109
- {
110
- _timeoutHandler . OnTimeout ( TimeoutReason . ReadDataRate ) ;
111
- }
110
+ timeout = rate < _minReadRate . BytesPerSecond && ! Debugger . IsAttached ;
112
111
}
113
112
114
113
// PauseTimingReads() cannot just set _timingReads to false. It needs to go through at least one tick
@@ -120,10 +119,18 @@ private void CheckForReadDataRateTimeout(long timestamp)
120
119
_readTimingPauseRequested = false ;
121
120
}
122
121
}
122
+
123
+ if ( timeout )
124
+ {
125
+ // Run callbacks outside of the lock
126
+ _timeoutHandler . OnTimeout ( TimeoutReason . ReadDataRate ) ;
127
+ }
123
128
}
124
129
125
130
private void CheckForWriteDataRateTimeout ( long timestamp )
126
131
{
132
+ var timeout = false ;
133
+
127
134
lock ( _writeTimingLock )
128
135
{
129
136
// Assume overly long tick intervals are the result of server resource starvation.
@@ -135,10 +142,13 @@ private void CheckForWriteDataRateTimeout(long timestamp)
135
142
_writeTimingTimeoutTimestamp += extraTimeForTick ;
136
143
}
137
144
138
- if ( _concurrentAwaitingWrites > 0 && timestamp > _writeTimingTimeoutTimestamp && ! Debugger . IsAttached )
139
- {
140
- _timeoutHandler . OnTimeout ( TimeoutReason . WriteDataRate ) ;
141
- }
145
+ timeout = _concurrentAwaitingWrites > 0 && timestamp > _writeTimingTimeoutTimestamp && ! Debugger . IsAttached ;
146
+ }
147
+
148
+ if ( timeout )
149
+ {
150
+ // Run callbacks outside of the lock
151
+ _timeoutHandler . OnTimeout ( TimeoutReason . WriteDataRate ) ;
142
152
}
143
153
}
144
154
0 commit comments