diff --git a/src/Nitload.Common/HighPerformance/Memory/L4.PredictorQueue.cs b/src/Nitload.Common/HighPerformance/Memory/L4.PredictorQueue.cs index a01ef41a..2b6b892d 100644 --- a/src/Nitload.Common/HighPerformance/Memory/L4.PredictorQueue.cs +++ b/src/Nitload.Common/HighPerformance/Memory/L4.PredictorQueue.cs @@ -45,8 +45,7 @@ namespace Nitload.Common.HighPerformance.Memory if (ReferenceEquals(predictor, _ring[idx])) { int end = _predict; - for (int move = i; move < end - 1; move++) - { + for (int move = i; move < end - 1; move++) { _ring[(byte)move] = _ring[(byte)(move + 1)]; } _ring[(byte)(end - 1)] = default!; @@ -58,7 +57,7 @@ namespace Nitload.Common.HighPerformance.Memory } finally { - Interlocked.Exchange(ref _queue_sync, 0); + _ = Interlocked.Exchange(ref _queue_sync, 0); } } @@ -77,9 +76,18 @@ namespace Nitload.Common.HighPerformance.Memory WaitForSpare(); _consume++; - - byte idx = (byte)_consume; - _ring[idx] = predictor; + try + { + unchecked + { + byte idx = (byte)_consume; + _ring[idx] = predictor; + } + } + finally + { + _ = Interlocked.Exchange(ref _queue_sync, 0); + } } private void WaitForSpare() diff --git a/src/Nitload.Common/HighPerformance/Memory/L4Predictor.cs b/src/Nitload.Common/HighPerformance/Memory/L4Predictor.cs index cde02196..bcab051a 100644 --- a/src/Nitload.Common/HighPerformance/Memory/L4Predictor.cs +++ b/src/Nitload.Common/HighPerformance/Memory/L4Predictor.cs @@ -33,5 +33,4 @@ namespace Nitload.Common.HighPerformance.Memory } - internal class PredictorMonitor { } }