summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <tim@rabbitmq.com>2012-07-23 16:26:52 +0100
committerTim Watson <tim@rabbitmq.com>2012-07-23 16:26:52 +0100
commit598e7e24fbd6529f71e33f48cdbecc5b437c050e (patch)
treef326804c71abca7abfe06ffaeb96791cadb3806e
parentf861229bc15de394d903e036f0ae9afb73e65afe (diff)
downloadrabbitmq-server-598e7e24fbd6529f71e33f48cdbecc5b437c050e.tar.gz
attempt to handle races between remove_from_queue and rmq_slave:init/1
-rw-r--r--src/rabbit_amqqueue.erl1
-rw-r--r--src/rabbit_mirror_queue_misc.erl4
2 files changed, 3 insertions, 2 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 8b82fbae..d82ac266 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -594,7 +594,6 @@ set_maximum_since_use(QPid, Age) ->
on_node_down(Node) ->
rabbit_misc:execute_mnesia_tx_with_tail(
fun () -> QsDels =
- %% BUG-24942/3: could one of these pids could be stale!?
qlc:e(qlc:q([{{QName, Pid}, delete_queue(QName)} ||
#amqqueue{name = QName, pid = Pid,
slave_pids = []}
diff --git a/src/rabbit_mirror_queue_misc.erl b/src/rabbit_mirror_queue_misc.erl
index 2c1885d4..31d85561 100644
--- a/src/rabbit_mirror_queue_misc.erl
+++ b/src/rabbit_mirror_queue_misc.erl
@@ -62,7 +62,9 @@ remove_from_queue(QueueName, DeadPids) ->
slave_pids = SPids }] ->
[QPid1 | SPids1] = Alive =
[Pid || Pid <- [QPid | SPids],
- not lists:member(node(Pid), DeadNodes)],
+ not lists:member(node(Pid),
+ DeadNodes) orelse
+ rabbit_misc:is_process_alive(Pid)],
case {{QPid, SPids}, {QPid1, SPids1}} of
{Same, Same} ->
{ok, QPid1, []};