diff --git a/src/emqx_ws_channel.erl b/src/emqx_ws_channel.erl index 6d60b968f..096e3261f 100644 --- a/src/emqx_ws_channel.erl +++ b/src/emqx_ws_channel.erl @@ -312,20 +312,25 @@ terminate(WsReason, _Req, #state{keepalive = Keepalive, case {ProtoState, Shutdown} of {undefined, _} -> ok; {_, {shutdown, Reason}} -> - SessionPid = emqx_protocol:session(ProtoState), - emqx_protocol:terminate(Reason, ProtoState), - SessionPid ! {'EXIT', self(), Reason}; + terminate_session(Reason, ProtoState); {_, _Error} -> ?LOG(info, "Terminate for unexpected error: ~p", [WsReason]), - SessionPid = emqx_protocol:session(ProtoState), - emqx_protocol:terminate(unknown, ProtoState), - SessionPid ! {'EXIT', self(), unknown} + terminate_session(unknown, ProtoState) end. %%-------------------------------------------------------------------- %% Internal functions %%-------------------------------------------------------------------- +terminate_session(Reason, ProtoState) -> + emqx_protocol:terminate(Reason, ProtoState), + case emqx_protocol:session(ProtoState) of + undefined -> + ok; + SessionPid -> + SessionPid ! {'EXIT', self(), Reason} + end. + handle_incoming(Packet, SuccFun, State = #state{proto_state = ProtoState}) -> case emqx_protocol:received(Packet, ProtoState) of {ok, NProtoState} ->