summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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