diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-07-07 17:40:34 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-07-07 17:40:34 +0100 |
| commit | de12df8853a6ec2ee1511d67e86e6b56a08f121e (patch) | |
| tree | fe927fb3174010b932814001f9dedf2eb9fca5d1 /src | |
| parent | 3ea5c8c70fd111854e149e4e477c37a2871fb9e8 (diff) | |
| download | rabbitmq-server-git-de12df8853a6ec2ee1511d67e86e6b56a08f121e.tar.gz | |
Unwrap amqp_error and rethrow
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_channel.erl | 7 |
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. |
