summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_channel.erl23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index 39a43e6012..48eeb40a02 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -299,17 +299,24 @@ check_read_permitted(Resource, #ch{ username = Username}) ->
check_resource_access(Username, Resource, read).
with_exclusive_access_or_die(QName, ReaderPid, F) ->
- Q = rabbit_amqqueue:with_or_die(QName, fun(Q1) -> Q1 end),
- case Q of
- #amqqueue{exclusive_owner = none} ->
- F(Q);
- #amqqueue{exclusive_owner = ReaderPid} ->
- F(Q);
- _ ->
+ F2 = fun(Q) ->
+ case Q of
+ #amqqueue{exclusive_owner = none} ->
+ F(Q);
+ #amqqueue{exclusive_owner = ReaderPid} ->
+ F(Q);
+ E ->
+ {error, E}
+ end
+ end,
+ case rabbit_amqqueue:with_or_die(QName, F2) of
+ {error, _} ->
rabbit_misc:protocol_error(
resource_locked,
"cannot obtain exclusive access to locked ~s",
- [rabbit_misc:rs(Q#amqqueue.name)])
+ [rabbit_misc:rs(QName)]);
+ Q ->
+ Q
end.
expand_queue_name_shortcut(<<>>, #ch{ most_recently_declared_queue = <<>> }) ->