diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2010-09-30 17:09:37 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-09-30 17:09:37 +0100 |
| commit | 8fbb9ed3f1a354ecefe431e97e4f8df223bce304 (patch) | |
| tree | 2c78ef260ecb38afa7179b38bf1452915bc9441c | |
| parent | 95b487858b6e63c701cf60af92c685af2bbd7c1b (diff) | |
| download | rabbitmq-server-git-8fbb9ed3f1a354ecefe431e97e4f8df223bce304.tar.gz | |
Change the SeenXs to a sets rather than a list
| -rw-r--r-- | src/rabbit_exchange.erl | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index e3ec1dccb3..62c1417962 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -227,7 +227,8 @@ info_all(VHostPath) -> map(VHostPath, fun (X) -> info(X) end). info_all(VHostPath, Items) -> map(VHostPath, fun (X) -> info(X, Items) end). publish(X = #exchange{name = XName}, Delivery) -> - QNames = find_qnames(Delivery, queue:from_list([X]), [XName], []), + QNames = find_qnames(Delivery, queue:from_list([X]), + sets:from_list([XName]), []), QPids = lookup_qpids(QNames), rabbit_router:deliver(QPids, Delivery). @@ -243,14 +244,16 @@ find_qnames(Delivery, WorkList, SeenXs, QNames) -> lists:foldl( fun (XName = #resource{kind = exchange}, {WorkListN, SeenXsN, QNamesN} = Acc) -> - case lists:member(XName, SeenXsN) of + case sets:is_element(XName, SeenXsN) of true -> Acc; false -> {case lookup(XName) of {ok, X1} -> queue:in(X1, WorkListN); {error, not_found} -> WorkListN - end, [XName | SeenXsN], QNamesN} + end, + sets:add_element(XName, SeenXsN), + QNamesN} end; (QName = #resource{kind = queue}, {WorkListN, SeenXsN, QNamesN})-> |
