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
commit42360d6d969d641262f157896ce95017e4bc0e83 (patch)
treea2e7ee5d7a7446698ef693f976eabc9cf5a29744
parent48abf8ddb13bf6cfd7907dc63073b345549d568f (diff)
downloadrabbitmq-server-git-42360d6d969d641262f157896ce95017e4bc0e83.tar.gz
deal with race condition
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 c8069e08ef..925c335cee 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