Skip to content

Commit 68ba9a9

Browse files
author
Cesar Blum Silveira
authored
Avoid torn reads from _frame.MinReadBodyDataRate in FrameConnection.Tick().
1 parent f2061ed commit 68ba9a9

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,16 +283,19 @@ public void Tick(DateTimeOffset now)
283283
{
284284
if (_readTimingEnabled)
285285
{
286+
// Reference in local var to avoid torn reads in case the min rate is changed via IHttpMinRequestBodyDataRateFeature
287+
var minRequestBodyDataRate = _frame.MinRequestBodyDataRate;
288+
286289
_readTimingElapsedTicks += timestamp - _lastTimestamp;
287290

288-
if (_frame.MinRequestBodyDataRate?.BytesPerSecond > 0 && _readTimingElapsedTicks > _frame.MinRequestBodyDataRate.GracePeriod.Ticks)
291+
if (minRequestBodyDataRate?.BytesPerSecond > 0 && _readTimingElapsedTicks > minRequestBodyDataRate.GracePeriod.Ticks)
289292
{
290293
var elapsedSeconds = (double)_readTimingElapsedTicks / TimeSpan.TicksPerSecond;
291294
var rate = Interlocked.Read(ref _readTimingBytesRead) / elapsedSeconds;
292295

293-
if (rate < _frame.MinRequestBodyDataRate.BytesPerSecond && !Debugger.IsAttached)
296+
if (rate < minRequestBodyDataRate.BytesPerSecond && !Debugger.IsAttached)
294297
{
295-
Log.RequestBodyMininumDataRateNotSatisfied(_context.ConnectionId, _frame.TraceIdentifier, _frame.MinRequestBodyDataRate.BytesPerSecond);
298+
Log.RequestBodyMininumDataRateNotSatisfied(_context.ConnectionId, _frame.TraceIdentifier, minRequestBodyDataRate.BytesPerSecond);
296299
Timeout();
297300
}
298301
}

0 commit comments

Comments
 (0)