From aa360d4378467159f049d17c59d7467ddb4a8b69 Mon Sep 17 00:00:00 2001 From: turtled Date: Tue, 18 Apr 2017 16:44:19 +0800 Subject: [PATCH] Fix duplicate send pubrec packet --- src/emqttd_session.erl | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index 85b027781..5e9dbd4ee 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -733,9 +733,14 @@ acked(puback, PacketId, State = #state{client_id = ClientId, acked(pubrec, PacketId, State = #state{client_id = ClientId, username = Username, inflight = Inflight}) -> - {publish, Msg, _Ts} = Inflight:lookup(PacketId), - emqttd_hooks:run('message.acked', [ClientId, Username], Msg), - State#state{inflight = Inflight:update(PacketId, {pubrel, PacketId, os:timestamp()})}; + case Inflight:lookup(PacketId) of + {publish, Msg, _Ts} -> + emqttd_hooks:run('message.acked', [ClientId, Username], Msg), + State#state{inflight = Inflight:update(PacketId, {pubrel, PacketId, os:timestamp()})}; + {pubrel, PacketId, _Ts} -> + ?LOG(error, "~p packet_id:~p, duplicate send pubrec packet", [ClientId, PacketId], State), + State + end; acked(pubcomp, PacketId, State = #state{inflight = Inflight}) -> State#state{inflight = Inflight:delete(PacketId)}.