summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2008-12-23 17:36:11 +0000
committerMatthias Radestock <matthias@lshift.net>2008-12-23 17:36:11 +0000
commitea338fed6f2d64406412362512b2f1bf4ac1b6f1 (patch)
treea2e7ee5d7a7446698ef693f976eabc9cf5a29744
parentcf1272653c67dd02824a416999f6cfb1891f829c (diff)
downloadrabbitmq-server-bug20061.tar.gz
deal with race conditionbug20061
queues may get deleted between the route calculation and the queue lookup
-rw-r--r--src/rabbit_exchange.erl6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index c8069e08..925c335c 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -268,8 +268,10 @@ route_internal(#exchange{name = Name}, RoutingKey) ->
lookup_qpids(Queues) ->
sets:fold(
fun(Key, Acc) ->
- [#amqqueue{pid = QPid}] = mnesia:dirty_read({amqqueue, Key}),
- [QPid | Acc]
+ case mnesia:dirty_read({amqqueue, Key}) of
+ [#amqqueue{pid = QPid}] -> [QPid | Acc];
+ [] -> Acc
+ end
end, [], sets:from_list(Queues)).
%% TODO: Should all of the route and binding management not be