diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-06-07 16:04:35 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-06-07 16:04:35 +0100 |
| commit | 99e132b3befd489c81bbd5ce80c15a2aecdde7ba (patch) | |
| tree | 615eb438aef0c09ebc6f8985eb22abd172642e45 /src | |
| parent | e29f0edda8c7d7996eee79a79a466daf47ce1e88 (diff) | |
| download | rabbitmq-server-git-99e132b3befd489c81bbd5ce80c15a2aecdde7ba.tar.gz | |
Don't do another dirty_read to get a queue we already have.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_channel.erl | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index fcec335277..7d1f59ab84 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -345,6 +345,18 @@ with_exclusive_access_or_die(QName, ReaderPid, F) -> Other end. +check_exclusive_access(Q = #amqqueue{exclusive_owner = Owner, + name = QName}, + ReaderPid) -> + case Owner of + none -> ok; + ReaderPid -> ok; + _ -> rabbit_misc:protocol_error( + resource_locked, + "cannot obtain exclusive access to locked ~s", + [rabbit_misc:rs(QName)]) + end. + expand_queue_name_shortcut(<<>>, #ch{ most_recently_declared_queue = <<>> }) -> rabbit_misc:protocol_error( not_allowed, "no previously declared queue", []); @@ -935,8 +947,8 @@ binding_action(Fun, ExchangeNameBin, QueueNameBin, RoutingKey, Arguments, check_read_permitted(ExchangeName, State), CheckExclusive = fun (_X, Q) -> - with_exclusive_access_or_die(Q#amqqueue.name, - ReaderPid, fun (_Q1)-> ok end) + check_exclusive_access(Q, ReaderPid), + fun (_Q1)-> ok end end, case Fun(ExchangeName, QueueName, ActualRoutingKey, Arguments, CheckExclusive) of |
