diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index f2e875a26..2e39d1742 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -882,7 +882,11 @@ terminate(normal, #channel{conninfo = ConnInfo, clientinfo = ClientInfo}) -> terminate({shutdown, Reason}, #channel{conninfo = ConnInfo, clientinfo = ClientInfo}) when Reason =:= kicked orelse Reason =:= discarded orelse Reason =:= takeovered -> ok = emqx_hooks:run('client.disconnected', [ClientInfo, Reason, ConnInfo]); -terminate(Reason, #channel{conninfo = ConnInfo, clientinfo = ClientInfo}) -> +terminate(Reason, #channel{conninfo = ConnInfo, clientinfo = ClientInfo, will_msg = WillMsg}) -> + case WillMsg of + undefined -> ok; + _ -> publish_will_msg(WillMsg) + end, ok = emqx_hooks:run('client.disconnected', [ClientInfo, Reason, ConnInfo]). %%--------------------------------------------------------------------