Skip to content

Commit 70b943a

Browse files
Merge pull request #1013 from LamarLugli/bugfix-1012
#1012 Fixed exception when consumer tag cannot be found in the consumers dictionary (cherry picked from commit d39bb71)
1 parent 73f07c1 commit 70b943a

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

projects/RabbitMQ.Client/client/impl/ModelBase.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ public void OnSessionShutdown(object sender, ShutdownEventArgs reason)
459459
SetCloseReason(reason);
460460
OnModelShutdown(reason);
461461
BroadcastShutdownToConsumers(_consumers, reason);
462-
ConsumerDispatcher.Shutdown(this).GetAwaiter().GetResult();;
462+
ConsumerDispatcher.Shutdown(this).GetAwaiter().GetResult(); ;
463463
}
464464

465465
protected void BroadcastShutdownToConsumers(Dictionary<string, IBasicConsumer> cs, ShutdownEventArgs reason)
@@ -625,8 +625,10 @@ public void HandleBasicCancel(string consumerTag, bool nowait)
625625
IBasicConsumer consumer;
626626
lock (_consumers)
627627
{
628-
consumer = _consumers[consumerTag];
629-
_consumers.Remove(consumerTag);
628+
if (_consumers.TryGetValue(consumerTag, out consumer))
629+
{
630+
_consumers.Remove(consumerTag);
631+
}
630632
}
631633
if (consumer == null)
632634
{
@@ -646,12 +648,24 @@ public void HandleBasicCancelOk(string consumerTag)
646648
consumerTag
647649
));
648650
*/
651+
IBasicConsumer consumer;
652+
649653
lock (_consumers)
650654
{
651-
k.m_consumer = _consumers[consumerTag];
652-
_consumers.Remove(consumerTag);
655+
if (_consumers.TryGetValue(consumerTag, out consumer))
656+
{
657+
k.m_consumer = consumer;
658+
_consumers.Remove(consumerTag);
659+
}
653660
}
661+
662+
if (consumer == null)
663+
{
664+
k.m_consumer = DefaultConsumer;
665+
}
666+
654667
ConsumerDispatcher.HandleBasicCancelOk(k.m_consumer, consumerTag);
668+
655669
k.HandleCommand(IncomingCommand.Empty); // release the continuation.
656670
}
657671

@@ -679,7 +693,7 @@ public virtual void HandleBasicDeliver(string consumerTag,
679693
IBasicConsumer consumer;
680694
lock (_consumers)
681695
{
682-
consumer = _consumers[consumerTag];
696+
_consumers.TryGetValue(consumerTag, out consumer);
683697
}
684698
if (consumer == null)
685699
{

0 commit comments

Comments
 (0)