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 | 6a8e793de751abe45de86a792afbf3fb3fe49e5f (patch) | |
tree | 22fea8cfc4237261bfd99365b03254c0b735595d | |
parent | bfcb24c703da7183702af1b0b3e4b50b03cf103a (diff) | |
parent | 1912e5faf809ab09a6bba861366693fd807eaafa (diff) | |
download | rabbitmq-server-6a8e793de751abe45de86a792afbf3fb3fe49e5f.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 ad9e3ce6..95ac1301 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) -> |