diff --git a/src/emqx_protocol.erl b/src/emqx_protocol.erl index aa4ad5c8a..4548821b0 100644 --- a/src/emqx_protocol.erl +++ b/src/emqx_protocol.erl @@ -555,7 +555,7 @@ do_publish(Packet = ?PUBLISH_PACKET(QoS, PacketId), PState = #pstate{session = SPid, mountpoint = MountPoint}) -> Msg = emqx_mountpoint:mount(MountPoint, emqx_packet:to_message(credentials(PState), Packet)), - puback(QoS, PacketId, emqx_session:publish(SPid, PacketId, Msg), PState). + puback(QoS, PacketId, emqx_session:publish(SPid, PacketId, emqx_message:set_flag(dup, false, Msg)), PState). %%------------------------------------------------------------------------------ %% Puback -> Client diff --git a/src/emqx_session.erl b/src/emqx_session.erl index a3023b382..ad88190cb 100644 --- a/src/emqx_session.erl +++ b/src/emqx_session.erl @@ -941,11 +941,8 @@ enqueue_msg(Msg, State = #state{mqueue = Q, client_id = ClientId, username = Use %% Deliver %%------------------------------------------------------------------------------ -redeliver({PacketId, Msg = #message{qos = QoS}}, State) -> - Msg1 = if - QoS =:= ?QOS_2 -> Msg; - true -> emqx_message:set_flag(dup, Msg) - end, +redeliver({PacketId, Msg = #message{qos = QoS}}, State) when QoS =/= ?QOS_0 -> + Msg1 = emqx_message:set_flag(dup, Msg), do_deliver(PacketId, Msg1, State); redeliver({pubrel, PacketId}, #state{deliver_fun = DeliverFun}) ->