From 6233aa7d46fb75dec8be055eaddc9f994e2a4643 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Sat, 12 Oct 2019 19:14:33 +0800 Subject: [PATCH] Ensure the 'conn_state' be 'disconnected' after socket closed --- src/emqx_channel.erl | 13 +++++++------ src/emqx_connection.erl | 2 +- test/emqx_ctl_SUITE.erl | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index e66817e39..2a92ba755 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -737,9 +737,9 @@ handle_info({register, Attrs, Stats}, #channel{clientinfo = #{clientid := Client handle_info({sock_closed, _Reason}, Channel = #channel{conn_state = disconnected}) -> {ok, Channel}; -handle_info({sock_closed, _Reason}, Channel = #channel{conninfo = ConnInfo, - clientinfo = ClientInfo = #{zone := Zone}, - will_msg = WillMsg}) -> +handle_info({sock_closed, Reason}, Channel = #channel{conninfo = ConnInfo, + clientinfo = ClientInfo = #{zone := Zone}, + will_msg = WillMsg}) -> emqx_zone:enable_flapping_detect(Zone) andalso emqx_flapping:detect(ClientInfo), ConnInfo1 = ConnInfo#{disconnected_at => erlang:system_time(second)}, Channel1 = Channel#channel{conninfo = ConnInfo1, conn_state = disconnected}, @@ -750,11 +750,11 @@ handle_info({sock_closed, _Reason}, Channel = #channel{conninfo = ConnInfo, end, case maps:get(expiry_interval, ConnInfo) of ?UINT_MAX -> - {ok, Channel2}; + {ok, {enter, disconnected}, Channel2}; Int when Int > 0 -> - {ok, ensure_timer(expire_timer, Channel2)}; + {ok, {enter, disconnected}, ensure_timer(expire_timer, Channel2)}; _Other -> - shutdown(closed, Channel2) + shutdown(Reason, Channel2) end; handle_info(Info, Channel) -> @@ -1206,3 +1206,4 @@ shutdown(Reason, Channel) -> shutdown(Reason, Packets, Channel) -> {stop, {shutdown, Reason}, Packets, Channel}. + diff --git a/src/emqx_connection.erl b/src/emqx_connection.erl index 3fa0db145..02d521814 100644 --- a/src/emqx_connection.erl +++ b/src/emqx_connection.erl @@ -554,7 +554,7 @@ handle_info(sock_closed, State) -> handle_info({close, Reason}, State) -> ?LOG(debug, "Force close due to : ~p", [Reason]), - {ok, close_socket(State)}; + handle_info({sock_closed, Reason}, close_socket(State)); handle_info(Info, State = #state{channel = Channel}) -> handle_return(emqx_channel:handle_info(Info, Channel), State). diff --git a/test/emqx_ctl_SUITE.erl b/test/emqx_ctl_SUITE.erl index eaec942a5..bdc31a321 100644 --- a/test/emqx_ctl_SUITE.erl +++ b/test/emqx_ctl_SUITE.erl @@ -25,6 +25,7 @@ all() -> emqx_ct:all(?MODULE). init_per_suite(Config) -> + ok = emqx_logger:set_log_level(emergency), Config. end_per_suite(_Config) ->