diff --git a/apps/emqttd/src/emqttd_protocol.erl b/apps/emqttd/src/emqttd_protocol.erl index d519a182e..2c07abbee 100644 --- a/apps/emqttd/src/emqttd_protocol.erl +++ b/apps/emqttd/src/emqttd_protocol.erl @@ -302,10 +302,16 @@ shutdown(duplicate_id, _State) -> shutdown(_, #proto_state{clientid = undefined}) -> ignore; -shutdown(normal, #proto_state{peername = Peername, clientid = ClientId}) -> +shutdown(normal, #proto_state{peername = Peername, clientid = ClientId, will_msg = WillMsg}) -> lager:info([{client, ClientId}], "Client ~s@~s: normal shutdown", [ClientId, emqttd_net:format(Peername)]), try_unregister(ClientId), + if + WillMsg =/= undefined -> + send_willmsg(ClientId, WillMsg); + true -> + ok + end, emqttd_broker:foreach_hooks(client_disconnected, [normal, ClientId]); shutdown(Error, #proto_state{peername = Peername, clientid = ClientId, will_msg = WillMsg}) -> @@ -331,6 +337,7 @@ send_willmsg(_ClientId, undefined) -> ignore; %%TODO:should call session... send_willmsg(ClientId, WillMsg) -> + lager:info("Client ~s send willmsg: ~p", [ClientId, WillMsg]), emqttd_pubsub:publish(ClientId, WillMsg). start_keepalive(0) -> ignore;