summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-01-17 16:47:20 +0000
committerSimon MacMullen <simon@rabbitmq.com>2013-01-17 16:47:20 +0000
commit1161f12f6bff0358ee91e0f9717e0a6d9a46dfb7 (patch)
tree14473617a813ba14e0464e1db192c14970ce883e /src
parent5fde25524195896fc1d48d61b4fa8ec4c7604e7b (diff)
parent1b485828c9f30e068aea69004469889b34d15835 (diff)
downloadrabbitmq-server-git-1161f12f6bff0358ee91e0f9717e0a6d9a46dfb7.tar.gz
Merge heads
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_reader.erl20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 27ea4d4b45..5efe1ed3d4 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -23,7 +23,7 @@
-export([system_continue/3, system_terminate/4, system_code_change/4]).
--export([init/4, mainloop/2]).
+-export([init/4, mainloop/2, recvloop/2]).
-export([conserve_resources/3, server_properties/1]).
@@ -242,13 +242,12 @@ start_connection(Parent, ConnSupPid, Collector, StartHeartbeatFun, Deb,
last_blocked_at = never}},
try
ok = inet_op(fun () -> rabbit_net:tune_buffer_size(ClientSock) end),
- recvloop(Deb, switch_callback(rabbit_event:init_stats_timer(
- State, #v1.stats_timer),
- handshake, 8)),
+ run({?MODULE, recvloop,
+ [Deb, switch_callback(rabbit_event:init_stats_timer(
+ State, #v1.stats_timer),
+ handshake, 8)]}),
log(info, "closing AMQP connection ~p (~s)~n", [self(), Name])
catch
- throw:{become, M, F, A} ->
- apply(M, F, A);
Ex -> log(case Ex of
connection_closed_abruptly -> warning;
_ -> error
@@ -267,6 +266,11 @@ start_connection(Parent, ConnSupPid, Collector, StartHeartbeatFun, Deb,
end,
done.
+run({M, F, A}) ->
+ try apply(M, F, A)
+ catch {become, MFA} -> run(MFA)
+ end.
+
recvloop(Deb, State = #v1{pending_recv = true}) ->
mainloop(Deb, State);
recvloop(Deb, State = #v1{connection_state = blocked}) ->
@@ -1007,8 +1011,8 @@ emit_stats(State) ->
become_1_0(Mode, Version, State = #v1{sock = Sock}) ->
case code:is_loaded(rabbit_amqp1_0_reader) of
false -> refuse_connection(Sock, {bad_version, Version});
- _ -> throw({become, rabbit_amqp1_0_reader, become,
- [Mode, pack_for_1_0(State)]})
+ _ -> throw({become, {rabbit_amqp1_0_reader, become,
+ [Mode, pack_for_1_0(State)]}})
end.
pack_for_1_0(#v1{parent = Parent,