summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-07-07 17:40:34 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-07-07 17:40:34 +0100
commitde12df8853a6ec2ee1511d67e86e6b56a08f121e (patch)
treefe927fb3174010b932814001f9dedf2eb9fca5d1
parent3ea5c8c70fd111854e149e4e477c37a2871fb9e8 (diff)
downloadrabbitmq-server-git-de12df8853a6ec2ee1511d67e86e6b56a08f121e.tar.gz
Unwrap amqp_error and rethrow
-rw-r--r--src/rabbit_channel.erl7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index fbbc50b9a1..6ad2a3a3d5 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -909,7 +909,7 @@ binding_action(Fun, ExchangeNameBin, QueueNameBin, RoutingKey, Arguments,
State),
ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin),
check_read_permitted(ExchangeName, State),
- case Fun(ExchangeName, QueueName, ActualRoutingKey, Arguments,
+ case catch Fun(ExchangeName, QueueName, ActualRoutingKey, Arguments,
fun (_X, Q) ->
rabbit_amqqueue:check_exclusive_access(Q, ReaderPid)
end) of
@@ -926,6 +926,11 @@ binding_action(Fun, ExchangeNameBin, QueueNameBin, RoutingKey, Arguments,
not_found, "no binding ~s between ~s and ~s",
[RoutingKey, rabbit_misc:rs(ExchangeName),
rabbit_misc:rs(QueueName)]);
+ %% When check_exclusive_access exits with a protocal error this gets
+ %% wrapped because rabbit_misc:execute_mnesia_transaction uses the
+ %% worker pool. Unwrap it and exit again.
+ {error, {amqp_error, _, _, _} = Error} ->
+ exit(Error);
ok -> return_ok(State, NoWait, ReturnMethod)
end.