summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-09-30 17:09:37 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-09-30 17:09:37 +0100
commit7816a942369260675a61066713f8e76bcb6d0432 (patch)
tree2c78ef260ecb38afa7179b38bf1452915bc9441c
parent68001e01905c771d4f6ebb712804e11be02a1c3a (diff)
downloadrabbitmq-server-7816a942369260675a61066713f8e76bcb6d0432.tar.gz
Change the SeenXs to a sets rather than a list
-rw-r--r--src/rabbit_exchange.erl9
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})->