diff --git a/Makefile b/Makefile index 4778ebdbb..4f1f637a2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ PROJECT = emqttd PROJECT_DESCRIPTION = Erlang MQTT Broker -PROJECT_VERSION = 2.1.1 +PROJECT_VERSION = 2.1.2 DEPS = goldrush gproc lager esockd mochiweb pbkdf2 lager_syslog diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index 85b027781..65d773e0d 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -726,16 +726,26 @@ await(Msg = #mqtt_message{pktid = PacketId}, acked(puback, 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:delete(PacketId)}; + case Inflight:lookup(PacketId) of + {publish, Msg, _Ts} -> + emqttd_hooks:run('message.acked', [ClientId, Username], Msg), + State#state{inflight = Inflight:delete(PacketId)}; + _ -> + ?LOG(warning, "Duplicated PUBACK Packet: ~p", [PacketId], State), + State + end; 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(warning, "Duplicated PUBREC Packet: ~p", [PacketId], State), + State + end; acked(pubcomp, PacketId, State = #state{inflight = Inflight}) -> State#state{inflight = Inflight:delete(PacketId)}.