summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_channel.erl15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index e408f0bfd9..3d264330d3 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -1317,16 +1317,11 @@ notify_queues(State = #ch{consumer_mapping = Consumers}) ->
State#ch{state = closing}}.
fold_per_queue(F, Acc0, UAQ) ->
- D = rabbit_misc:queue_fold(
- fun ({_DTag, _CTag, {QPid, MsgId}}, D) ->
- %% dict:append would avoid the lists:reverse in
- %% handle_message({recover, true}, ...). However, it
- %% is significantly slower when going beyond a few
- %% thousand elements.
- rabbit_misc:dict_cons(QPid, MsgId, D)
- end, dict:new(), UAQ),
- dict:fold(fun (QPid, MsgIds, Acc) -> F(QPid, MsgIds, Acc) end,
- Acc0, D).
+ T = rabbit_misc:queue_fold(
+ fun ({_DTag, _CTag, {QPid, MsgId}}, T) ->
+ rabbit_misc:gb_trees_cons(QPid, MsgId, T)
+ end, gb_trees:empty(), UAQ),
+ rabbit_misc:gb_trees_fold(F, Acc0, T).
enable_limiter(State = #ch{unacked_message_q = UAMQ,
limiter = Limiter}) ->