diff options
| author | Emile Joubert <emile@rabbitmq.com> | 2011-01-27 11:15:54 +0000 |
|---|---|---|
| committer | Emile Joubert <emile@rabbitmq.com> | 2011-01-27 11:15:54 +0000 |
| commit | 1ed46ae197155be72bcf86182a55ff3f77957b48 (patch) | |
| tree | 22fea8cfc4237261bfd99365b03254c0b735595d | |
| parent | 1113838e23b5ac79326ffe0d1eef47be967a4441 (diff) | |
| parent | f37fd428890c3d00fe30cde61097577f6a7eb921 (diff) | |
| download | rabbitmq-server-git-1ed46ae197155be72bcf86182a55ff3f77957b48.tar.gz | |
Merged bug23744 into default
| -rw-r--r-- | src/rabbit_amqqueue.erl | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index ad9e3ce609..95ac1301b1 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -215,8 +215,12 @@ internal_declare(Q = #amqqueue{name = QueueName}, false) -> [_] -> %% Q exists on stopped node rabbit_misc:const(not_found) end; - [ExistingQ] -> - rabbit_misc:const(ExistingQ) + [ExistingQ = #amqqueue{pid = QPid}] -> + case is_process_alive(QPid) of + true -> rabbit_misc:const(ExistingQ); + false -> TailFun = internal_delete(QueueName), + fun (Tx) -> TailFun(Tx), ExistingQ end + end end end). @@ -432,17 +436,15 @@ internal_delete1(QueueName) -> rabbit_binding:remove_for_destination(QueueName). internal_delete(QueueName) -> - rabbit_misc:execute_mnesia_transaction( + rabbit_misc:execute_mnesia_tx_with_tail( fun () -> case mnesia:wread({rabbit_queue, QueueName}) of - [] -> {error, not_found}; - [_] -> internal_delete1(QueueName) + [] -> rabbit_misc:const({error, not_found}); + [_] -> Deletions = internal_delete1(QueueName), + fun (Tx) -> ok = rabbit_binding:process_deletions( + Deletions, Tx) + end end - end, - fun ({error, _} = Err, _Tx) -> - Err; - (Deletions, Tx) -> - ok = rabbit_binding:process_deletions(Deletions, Tx) end). maybe_run_queue_via_backing_queue(QPid, Fun) -> |
