Skip to content

Commit 3ff91d8

Browse files
committed
Limit NewItemInQueueEvents keys to a specific storage
1 parent 42e608b commit 3ff91d8

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

src/Hangfire.SqlServer/SqlServerJobQueue.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal class SqlServerJobQueue : IPersistentJobQueue
3434
// This is an optimization that helps to overcome the polling delay, when
3535
// both client and server reside in the same process. Everything is working
3636
// without these events, but it helps to reduce the delays in processing.
37-
internal static readonly ConcurrentDictionary<string, AutoResetEvent> NewItemInQueueEvents = new();
37+
internal static readonly ConcurrentDictionary<Tuple<SqlServerStorage, string>, AutoResetEvent> NewItemInQueueEvents = new();
3838

3939
private static readonly Func<Tuple<SqlServerStorage, string>, SemaphoreSlim> CreateSemaphoreFunc = CreateSemaphore;
4040
private static readonly TimeSpan LongPollingThreshold = TimeSpan.FromSeconds(1);
@@ -123,7 +123,7 @@ private SqlServerTimeoutJob DequeueUsingSlidingInvisibilityTimeout(string[] queu
123123
var queuesString = String.Join("_", queues.OrderBy(static x => x));
124124
var resource = Tuple.Create(_storage, queuesString);
125125

126-
var waitArray = GetWaitArrayForQueueSignals(queues, cancellationToken);
126+
var waitArray = GetWaitArrayForQueueSignals(_storage, queues, cancellationToken);
127127

128128
SemaphoreSlim semaphore = null;
129129

@@ -210,7 +210,7 @@ private SqlServerTransactionJob DequeueUsingTransaction(string[] queues, Cancell
210210
? _options.QueuePollInterval
211211
: TimeSpan.FromSeconds(1);
212212

213-
var waitArray = GetWaitArrayForQueueSignals(queues, cancellationToken);
213+
var waitArray = GetWaitArrayForQueueSignals(_storage, queues, cancellationToken);
214214

215215
while (!cancellationToken.IsCancellationRequested)
216216
{
@@ -271,7 +271,7 @@ private SqlServerTransactionJob DequeueUsingTransaction(string[] queues, Cancell
271271
return null;
272272
}
273273

274-
private static WaitHandle[] GetWaitArrayForQueueSignals(string[] queues, CancellationToken cancellationToken)
274+
private static WaitHandle[] GetWaitArrayForQueueSignals(SqlServerStorage storage, string[] queues, CancellationToken cancellationToken)
275275
{
276276
var waitList = new List<WaitHandle>(capacity: queues.Length + 1)
277277
{
@@ -280,7 +280,7 @@ private static WaitHandle[] GetWaitArrayForQueueSignals(string[] queues, Cancell
280280

281281
foreach (var queue in queues)
282282
{
283-
waitList.Add(NewItemInQueueEvents.GetOrAdd(queue, static _ => new AutoResetEvent(initialState: false)));
283+
waitList.Add(NewItemInQueueEvents.GetOrAdd(Tuple.Create(storage, queue), static _ => new AutoResetEvent(initialState: false)));
284284
}
285285

286286
return waitList.ToArray();

src/Hangfire.SqlServer/SqlServerWriteOnlyTransaction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ private void TrySignalListeningWorkers()
622622
{
623623
foreach (var queue in _queuesToSignal)
624624
{
625-
if (SqlServerJobQueue.NewItemInQueueEvents.TryGetValue(queue, out var signal))
625+
if (SqlServerJobQueue.NewItemInQueueEvents.TryGetValue(Tuple.Create(_storage, queue), out var signal))
626626
{
627627
signal.Set();
628628
}

0 commit comments

Comments
 (0)