Skip to content
This repository was archived by the owner on Nov 17, 2020. It is now read-only.

Commit eebcd5d

Browse files
Revert "Revert "Use {active,once} instead of async_recv""
This reverts commit cd3a75e. The change to {active, once} ended up being unrelated; it's a bug in the Erlang 21.2 ssl app.
1 parent cd3a75e commit eebcd5d

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/rabbit_mqtt_reader.erl

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,29 @@ handle_info(#'basic.cancel'{}, State) ->
131131
handle_info({'EXIT', _Conn, Reason}, State) ->
132132
{stop, {connection_died, Reason}, State};
133133

134-
handle_info({inet_reply, _Ref, ok}, State) ->
135-
{noreply, State, hibernate};
136-
137-
handle_info({inet_async, Sock, _Ref, {ok, Data}},
138-
State = #state{ socket = Sock, connection_state = blocked }) ->
134+
handle_info({Tag, Sock, Data},
135+
State = #state{ socket = Sock, connection_state = blocked })
136+
when Tag =:= tcp; Tag =:= ssl ->
139137
{noreply, State#state{ deferred_recv = Data }, hibernate};
140138

141-
handle_info({inet_async, Sock, _Ref, {ok, Data}},
142-
State = #state{ socket = Sock, connection_state = running }) ->
139+
handle_info({Tag, Sock, Data},
140+
State = #state{ socket = Sock, connection_state = running })
141+
when Tag =:= tcp; Tag =:= ssl ->
143142
process_received_bytes(
144143
Data, control_throttle(State #state{ await_recv = false }));
145144

146-
handle_info({inet_async, _Sock, _Ref, {error, Reason}}, State = #state {}) ->
145+
handle_info({Tag, Sock}, State = #state{socket = Sock})
146+
when Tag =:= tcp_closed; Tag =:= ssl_closed ->
147+
network_error(closed, State);
148+
149+
handle_info({Tag, Sock, Reason}, State = #state{socket = Sock})
150+
when Tag =:= tcp_error; Tag =:= ssl_error ->
147151
network_error(Reason, State);
148152

149-
handle_info({inet_reply, _Sock, {error, Reason}}, State = #state {}) ->
153+
handle_info({inet_reply, Sock, ok}, State = #state{socket = Sock}) ->
154+
{noreply, State, hibernate};
155+
156+
handle_info({inet_reply, Sock, {error, Reason}}, State = #state{socket = Sock}) ->
150157
network_error(Reason, State);
151158

152159
handle_info({conserve_resources, Conserve}, State) ->
@@ -348,7 +355,7 @@ run_socket(State = #state{ deferred_recv = Data }) when Data =/= undefined ->
348355
run_socket(State = #state{ await_recv = true }) ->
349356
State;
350357
run_socket(State = #state{ socket = Sock }) ->
351-
rabbit_net:async_recv(Sock, 0, infinity),
358+
rabbit_net:setopts(Sock, [{active, once}]),
352359
State#state{ await_recv = true }.
353360

354361
control_throttle(State = #state{ connection_state = Flow,
@@ -367,7 +374,7 @@ control_throttle(State = #state{ connection_state = Flow,
367374
maybe_process_deferred_recv(State = #state{ deferred_recv = undefined }) ->
368375
{noreply, State, hibernate};
369376
maybe_process_deferred_recv(State = #state{ deferred_recv = Data, socket = Sock }) ->
370-
handle_info({inet_async, Sock, noref, {ok, Data}},
377+
handle_info({tcp, Sock, Data},
371378
State#state{ deferred_recv = undefined }).
372379

373380
maybe_emit_stats(undefined) ->

0 commit comments

Comments
 (0)