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 | a3c646849871a70b66bf8ca219a420227e29ca4a (patch) | |
| tree | 524e8a1f10c7ce5cb0cdc4f51e5b7f189871fcff /src | |
| parent | b16a7e7478a10a2f145c94d4862630656259a79c (diff) | |
| download | rabbitmq-server-git-a3c646849871a70b66bf8ca219a420227e29ca4a.tar.gz | |
Avoid construction of intermediate queue
Diffstat (limited to 'src')
| -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 d2559868dd..e3a2ca9010 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, []). |
