From 3175bb3e6c459fb065e850ed80d7fb65b199611b Mon Sep 17 00:00:00 2001 From: kjnilsson Date: Fri, 17 Mar 2017 10:05:21 +0000 Subject: [PATCH 1/2] Use ConcurrentDictionary.TryAdd instead of IDictionary.Add IDictionary.Add throws if the key is already present which makes it fail when adding the same binding more than once. [#141934415] --- .../src/client/impl/AutorecoveringConnection.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs b/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs index 3994272aee..57ba4da6c1 100644 --- a/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs +++ b/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs @@ -75,7 +75,7 @@ public class AutorecoveringConnection : IConnection, IRecoverable protected List m_models = new List(); - protected IDictionary m_recordedBindings = + protected ConcurrentDictionary m_recordedBindings = new ConcurrentDictionary(); protected List> m_recordedBlockedEventHandlers = @@ -418,7 +418,7 @@ public void DeleteRecordedBinding(RecordedBinding rb) { lock (m_recordedEntitiesLock) { - m_recordedBindings.Remove(rb); + ((IDictionary)m_recordedBindings).Remove(rb); } } @@ -448,7 +448,7 @@ public void DeleteRecordedExchange(string name) var bs = m_recordedBindings.Keys.Where(b => name.Equals(b.Destination)); foreach (RecordedBinding b in bs) { - m_recordedBindings.Remove(b); + DeleteRecordedBinding(b); MaybeDeleteRecordedAutoDeleteExchange(b.Source); } } @@ -464,7 +464,7 @@ public void DeleteRecordedQueue(string name) var bs = m_recordedBindings.Keys.Where(b => name.Equals(b.Destination)); foreach (RecordedBinding b in bs) { - m_recordedBindings.Remove(b); + DeleteRecordedBinding(b); MaybeDeleteRecordedAutoDeleteExchange(b.Source); } } @@ -523,7 +523,7 @@ public void RecordBinding(RecordedBinding rb) { lock (m_recordedEntitiesLock) { - m_recordedBindings.Add(rb, 0); + m_recordedBindings.TryAdd(rb, 0); } } From 4b4ccaf327345bfbfaf4fdc1f73dbec730262862 Mon Sep 17 00:00:00 2001 From: kjnilsson Date: Fri, 17 Mar 2017 14:07:52 +0000 Subject: [PATCH 2/2] fix cast --- .../RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs b/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs index 57ba4da6c1..ebc02be3de 100644 --- a/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs +++ b/projects/client/RabbitMQ.Client/src/client/impl/AutorecoveringConnection.cs @@ -418,7 +418,7 @@ public void DeleteRecordedBinding(RecordedBinding rb) { lock (m_recordedEntitiesLock) { - ((IDictionary)m_recordedBindings).Remove(rb); + ((IDictionary)m_recordedBindings).Remove(rb); } }