summaryrefslogtreecommitdiff
path: root/src/rabbit_amqqueue.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-03-28 16:41:43 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-03-28 16:41:43 +0100
commit0bc5d1ec85c0bce3ac1d89180248fac64e78e0a0 (patch)
tree807c02926440ca3253000ee1045a4ba5f63ca786 /src/rabbit_amqqueue.erl
parent52e4fe98abbaddad26e0547ce0cf6bf51dbaed9f (diff)
downloadrabbitmq-server-0bc5d1ec85c0bce3ac1d89180248fac64e78e0a0.tar.gz
Fix on_node_down.
Diffstat (limited to 'src/rabbit_amqqueue.erl')
-rw-r--r--src/rabbit_amqqueue.erl23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 60b7b384..e300fa32 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -466,18 +466,17 @@ drop_expired(QPid) ->
gen_server2:cast(QPid, drop_expired).
on_node_down(Node) ->
- rabbit_misc:execute_mnesia_transaction(
- fun () -> qlc:e(qlc:q([delete_queue(QueueName) ||
- #amqqueue{name = QueueName, pid = Pid}
- <- mnesia:table(rabbit_queue),
- node(Pid) == Node]))
- end,
- fun (Deletions, Tx) ->
- rabbit_binding:process_deletions(
- lists:foldl(fun rabbit_binding:combine_deletions/2,
- rabbit_binding:new_deletions(),
- Deletions),
- Tx)
+ rabbit_misc:execute_mnesia_tx_with_tail(
+ fun () -> Dels = qlc:e(qlc:q([delete_queue(QueueName) ||
+ #amqqueue{name = QueueName, pid = Pid}
+ <- mnesia:table(rabbit_queue),
+ node(Pid) == Node])),
+ Dels1 = lists:foldl(fun rabbit_binding:combine_deletions/2,
+ rabbit_binding:new_deletions(), Dels),
+ Serials = rabbit_binding:process_deletions(Dels1, transaction),
+ fun () ->
+ rabbit_binding:process_deletions(Dels1, Serials)
+ end
end).
delete_queue(QueueName) ->