summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Garnock-Jones <tonyg@lshift.net>2009-11-23 14:53:22 +0000
committerTony Garnock-Jones <tonyg@lshift.net>2009-11-23 14:53:22 +0000
commit9e4a1b80e24b90d5c84218a070c3ce61ce3fa99f (patch)
tree1d0581bd2fd7771ee28dde84cb28f067e7e647c6
parent588f04825a17950f7645a2a79b30e6277d5f4368 (diff)
downloadrabbitmq-server-9e4a1b80e24b90d5c84218a070c3ce61ce3fa99f.tar.gz
Comment lists:keysort in delete_queue_bindings
-rw-r--r--src/rabbit_exchange.erl7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index 9af7a7a0..621162f6 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -275,9 +275,16 @@ delete_queue_bindings(QueueName, FwdDeleteFun) ->
#route{binding = #binding{queue_name = QueueName,
_ = '_'}}),
write)],
+ %% We need the keysort to group the bindings by exchange name, so
+ %% that cleanup_deleted_queue_bindings can inform the exchange of
+ %% its vanished bindings before maybe_auto_delete'ing the
+ %% exchange.
ok = cleanup_deleted_queue_bindings(lists:keysort(#binding.exchange_name, DeletedBindings),
none, []).
+%% Requires that its input binding list is sorted in exchange-name
+%% order, so that the grouping of bindings (for passing to
+%% cleanup_deleted_queue_bindings1) works properly.
cleanup_deleted_queue_bindings([], ExchangeName, Bindings) ->
cleanup_deleted_queue_bindings1(ExchangeName, Bindings);
cleanup_deleted_queue_bindings([B = #binding{exchange_name = N} | Rest], ExchangeName, Bindings)