From 60f6bb58294eb872774e629e17e8afd57e0af7ae Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 15 Jan 2023 01:10:35 +0100 Subject: [PATCH] ignore queue semaphore when processing queue --- .../Services/RequestQueueService.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs index a15b9ba..ff7a515 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs @@ -16,7 +16,6 @@ public class RequestQueueService : IHostedService private readonly int _queueExpirationSeconds; private SemaphoreSlim _queueSemaphore = new(1); private SemaphoreSlim _queueProcessingSemaphore = new(1); - private bool _isProcessingQueue = false; private System.Timers.Timer _queueTimer; public RequestQueueService(MareMetrics metrics, IConfigurationService configurationService, ILogger logger) @@ -104,13 +103,12 @@ public class RequestQueueService : IHostedService private async void ProcessQueue(object src, ElapsedEventArgs e) { - if (_isProcessingQueue) return; + if (_queueProcessingSemaphore.CurrentCount == 0) return; + + await _queueProcessingSemaphore.WaitAsync().ConfigureAwait(false); - _isProcessingQueue = true; try { - await _queueProcessingSemaphore.WaitAsync().ConfigureAwait(false); - await _queueSemaphore.WaitAsync().ConfigureAwait(false); for (int i = 0; i < _userQueueRequests.Length; i++) { if (_userQueueRequests[i] != null && !_userQueueRequests[i].IsActive && _userQueueRequests[i].ExpirationDate < DateTime.UtcNow) _userQueueRequests[i] = null; @@ -134,11 +132,9 @@ public class RequestQueueService : IHostedService finally { _queueProcessingSemaphore.Release(); - _queueSemaphore.Release(); } _metrics.SetGaugeTo(MetricsAPI.GaugeDownloadQueue, _queue.Count); - _isProcessingQueue = false; } private void DequeueIntoSlot(UserRequest userRequest, int slot)