Преглед изворни кода

fix(channel): expect there's no session yet on disconnect

Andrew Mayorov пре 2 година
родитељ
комит
6b17920fea
1 измењених фајлова са 6 додато и 1 уклоњено
  1. 6 1
      apps/emqx/src/emqx_channel.erl

+ 6 - 1
apps/emqx/src/emqx_channel.erl

@@ -1211,7 +1211,7 @@ handle_info(
 ) when
     ConnState =:= connected orelse ConnState =:= reauthenticating
 ->
-    {Intent, Session1} = emqx_session:disconnect(ClientInfo, ConnInfo, Session),
+    {Intent, Session1} = session_disconnect(ClientInfo, ConnInfo, Session),
     Channel1 = ensure_disconnected(Reason, maybe_publish_will_msg(Channel)),
     Channel2 = Channel1#channel{session = Session1},
     case maybe_shutdown(Reason, Intent, Channel2) of
@@ -2191,6 +2191,11 @@ ensure_disconnected(
     emqx_cm:mark_channel_disconnected(ChanPid),
     Channel#channel{conninfo = NConnInfo, conn_state = disconnected}.
 
+session_disconnect(ClientInfo, ConnInfo, Session) when Session /= undefined ->
+    emqx_session:disconnect(ClientInfo, ConnInfo, Session);
+session_disconnect(_ClientInfo, _ConnInfo, undefined) ->
+    {shutdown, undefined}.
+
 %%--------------------------------------------------------------------
 %% Maybe Publish will msg