Просмотр исходного кода

Clear dup flag if message published first (#2337)

tigercl 7 лет назад
Родитель
Сommit
5a401c44fd
2 измененных файлов с 3 добавлено и 6 удалено
  1. 1 1
      src/emqx_protocol.erl
  2. 2 5
      src/emqx_session.erl

+ 1 - 1
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

+ 2 - 5
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}) ->