Fix the ws channel terminating crash when session pid is undefined

This commit is contained in:
GilbertWong 2019-07-18 20:11:36 +08:00 committed by Shawn
parent 391e39c3b6
commit eb68ce77b6
1 changed files with 11 additions and 6 deletions

View File

@ -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} ->