diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2011-09-22 12:32:06 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-09-22 12:32:06 +0100 |
commit | 61b426d83ebb25f9a6bc07cb5e1a5d3833b6d23e (patch) | |
tree | 524e8a1f10c7ce5cb0cdc4f51e5b7f189871fcff | |
parent | 2dab788ca9b74e09cf0515702d1697e0b51d5fca (diff) | |
download | rabbitmq-server-bug24433.tar.gz |
Avoid construction of intermediate queuebug24433
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index d2559868..e3a2ca90 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -800,13 +800,14 @@ i(Item, _) -> throw({bad_argument, Item}). consumers(#q{active_consumers = ActiveConsumers}) -> + lists:foldl(fun (C, Acc) -> consumers(C#cr.blocked_consumers, Acc) end, + consumers(ActiveConsumers, []), all_ch_record()). + +consumers(Consumers, Acc) -> rabbit_misc:queue_fold( - fun ({ChPid, #consumer{tag = ConsumerTag, - ack_required = AckRequired}}, Acc) -> - [{ChPid, ConsumerTag, AckRequired} | Acc] - end, [], lists:foldl(fun (#cr{blocked_consumers = Consumers}, Acc) -> - queue:join(Acc, Consumers) - end, ActiveConsumers, all_ch_record())). + fun ({ChPid, #consumer{tag = CTag, ack_required = AckRequired}}, Acc1) -> + [{ChPid, CTag, AckRequired} | Acc1] + end, Acc, Consumers). emit_stats(State) -> emit_stats(State, []). |