From f0f1456168303c4298e308bb146e5e81ffb9c2f7 Mon Sep 17 00:00:00 2001 From: Gilbert Wong Date: Mon, 27 Aug 2018 11:21:16 +0800 Subject: [PATCH] fix duplicated subscribers with same topic --- src/emqx_broker.erl | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/emqx_broker.erl b/src/emqx_broker.erl index 8fed40b7f..560c095cf 100644 --- a/src/emqx_broker.erl +++ b/src/emqx_broker.erl @@ -379,9 +379,18 @@ code_change(_OldVsn, State, _Extra) -> %% Internal functions %%------------------------------------------------------------------------------ +insert_subscriber(Group, Topic, Subscriber) -> + Subscribers = subscribers(Topic), + case lists:member(Subscriber, Subscribers) of + false -> + ets:insert(?SUBSCRIBER, {Topic, shared(Group, Subscriber)}); + _ -> + ok + end. + do_subscribe(Group, Topic, Subscriber, SubOpts) -> ets:insert(?SUBSCRIPTION, {Subscriber, shared(Group, Topic)}), - ets:insert(?SUBSCRIBER, {Topic, shared(Group, Subscriber)}), + insert_subscriber(Group, Topic, Subscriber), ets:insert(?SUBOPTION, {{Topic, Subscriber}, SubOpts}). do_unsubscribe(Group, Topic, Subscriber) ->