diff options
| author | Matthias Radestock <matthias@lshift.net> | 2008-12-23 17:36:11 +0000 |
|---|---|---|
| committer | Matthias Radestock <matthias@lshift.net> | 2008-12-23 17:36:11 +0000 |
| commit | 42360d6d969d641262f157896ce95017e4bc0e83 (patch) | |
| tree | a2e7ee5d7a7446698ef693f976eabc9cf5a29744 | |
| parent | 48abf8ddb13bf6cfd7907dc63073b345549d568f (diff) | |
| download | rabbitmq-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.erl | 6 |
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 |
