Skip to content

Commit 4c922a8

Browse files
Make SignalR Redis test thread-safe (#41564)
1 parent 8a4b4de commit 4c922a8

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/SignalR/server/StackExchangeRedis/test/TestConnectionMultiplexer.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,12 @@ public long Publish(RedisChannel channel, RedisValue message, CommandFlags flags
232232
{
233233
if (_subscriptions.TryGetValue(channel, out var handlers))
234234
{
235-
foreach (var (_, handler) in handlers)
235+
lock (handlers)
236236
{
237-
handler(channel, message);
237+
foreach (var (_, handler) in handlers)
238+
{
239+
handler(channel, message);
240+
}
238241
}
239242
}
240243

@@ -253,7 +256,10 @@ public void Subscribe(ChannelMessageQueue messageQueue, int subscriberId, Comman
253256

254257
_subscriptions.AddOrUpdate(messageQueue.Channel, _ => new List<(int, Action<RedisChannel, RedisValue>)> { (subscriberId, handler) }, (_, list) =>
255258
{
256-
list.Add((subscriberId, handler));
259+
lock (list)
260+
{
261+
list.Add((subscriberId, handler));
262+
}
257263
return list;
258264
});
259265
}
@@ -262,7 +268,10 @@ public void Unsubscribe(RedisChannel channel, int subscriberId, CommandFlags fla
262268
{
263269
if (_subscriptions.TryGetValue(channel, out var list))
264270
{
265-
list.RemoveAll((item) => item.Item1 == subscriberId);
271+
lock (list)
272+
{
273+
list.RemoveAll((item) => item.Item1 == subscriberId);
274+
}
266275
}
267276
}
268277
}

0 commit comments

Comments
 (0)