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 | 7816a942369260675a61066713f8e76bcb6d0432 (patch) | |
tree | 2c78ef260ecb38afa7179b38bf1452915bc9441c | |
parent | 68001e01905c771d4f6ebb712804e11be02a1c3a (diff) | |
download | rabbitmq-server-7816a942369260675a61066713f8e76bcb6d0432.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 e3ec1dcc..62c14179 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})-> |