summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hood <0x6e6562@gmail.com>2008-10-05 20:12:51 +0100
committerBen Hood <0x6e6562@gmail.com>2008-10-05 20:12:51 +0100
commit9de5dbe9a92f8a1cf7243c8e73f3f489452b509a (patch)
tree895c17c1e50f6e3d8ddb1db53a1e2f34eaa3a30e
parent96e8235eeae6dce5ce000ba59171084592501fbe (diff)
downloadrabbitmq-server-git-9de5dbe9a92f8a1cf7243c8e73f3f489452b509a.tar.gz
Refactored deleting forwards bindings
-rw-r--r--src/rabbit_exchange.erl14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index db74e890a6..871ccf4b4e 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -218,7 +218,7 @@ lookup_qpids(Queues) ->
[QPid | Acc]
end, [], sets:from_list(Queues)).
-delete_forwards_route(ExchangeName, QueueName) ->
+delete_forward_routes(ExchangeName, QueueName) ->
Route = #route{binding = #binding{exchange_name = ExchangeName,
queue_name = QueueName,
key = '_'}},
@@ -247,7 +247,7 @@ delete_bindings(Binding = #binding{exchange_name = X,
end;
true -> ok
end,
- delete_forwards_route(ExchangeName, QueueName)
+ delete_forward_routes(ExchangeName, QueueName)
end)
end, exchanges_for_queue(QueueName)),
ok = mnesia:delete_object(reverse_route(#route{binding = Binding}));
@@ -258,10 +258,12 @@ delete_bindings(Binding = #binding{exchange_name = ExchangeName,
when QueueName == '_'
andalso ExchangeName /= '_' ->
% This uses the forward routes as the primary index
- {Route, ReverseRoute} = route_with_reverse(Binding),
- ok = mnesia:delete_object(Route),
- ok = mnesia:delete_object(ReverseRoute),
- ok = mnesia:delete_object(durable_routes, Route, write);
+ RouteMatch = #route{binding = Binding},
+ lists:foreach(fun(Route) ->
+ ok = mnesia:delete_object(reverse_route(Route))
+ end, mnesia:match_object(RouteMatch)),
+ ok = mnesia:delete_object(RouteMatch),
+ ok = mnesia:delete_object(durable_routes, RouteMatch, write);
% Must be called in a transaction