diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index 92c6bb3d2..386c4490b 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -1536,9 +1536,8 @@ ensure_connected(Channel = #channel{conninfo = ConnInfo, clientinfo = ClientInfo}) -> NConnInfo = ConnInfo#{connected_at => erlang:system_time(millisecond)}, ok = run_hooks('client.connected', [ClientInfo, NConnInfo]), - ClientID = info(clientid, Channel), - Chan = {ClientID, self()}, - emqx_cm:increment_connected_client_count(Chan), + ChanPid = self(), + emqx_cm:increment_connected_client_count(ChanPid), Channel#channel{conninfo = NConnInfo, conn_state = connected }. @@ -1627,9 +1626,8 @@ ensure_disconnected(Reason, Channel = #channel{conninfo = ConnInfo, clientinfo = ClientInfo}) -> NConnInfo = ConnInfo#{disconnected_at => erlang:system_time(millisecond)}, ok = run_hooks('client.disconnected', [ClientInfo, Reason, NConnInfo]), - ClientID = info(clientid, Channel), - Chan = {ClientID, self()}, - emqx_cm:decrement_connected_client_count(Chan), + ChanPid = self(), + emqx_cm:decrement_connected_client_count(ChanPid), Channel#channel{conninfo = NConnInfo, conn_state = disconnected}. %%-------------------------------------------------------------------- diff --git a/src/emqx_cm.erl b/src/emqx_cm.erl index c14e3c19e..bc1cccfd7 100644 --- a/src/emqx_cm.erl +++ b/src/emqx_cm.erl @@ -470,7 +470,7 @@ handle_info({'DOWN', _MRef, process, Pid, _Reason}, State = #{chan_pmon := PMon} Chan = {ClientID, ChanPid}, case ets:lookup(?CHAN_INFO_TAB, Chan) of [{Chan, #{conn_state := connected}, _}] -> - decrement_connected_client_count(Chan); + decrement_connected_client_count(ChanPid); _ -> ok end @@ -513,14 +513,14 @@ get_chann_conn_mod(ClientId, ChanPid) when node(ChanPid) == node() -> get_chann_conn_mod(ClientId, ChanPid) -> rpc_call(node(ChanPid), get_chann_conn_mod, [ClientId, ChanPid], ?T_GET_INFO). -increment_connected_client_count(Chan) -> +increment_connected_client_count(ChanPid) -> ?tp(emqx_cm_connected_client_count_inc, #{}), - ets:insert_new(?CONN_CLIENT_TAB, {Chan, true}), + ets:insert_new(?CONN_CLIENT_TAB, {ChanPid, true}), ok. -decrement_connected_client_count(Chan) -> +decrement_connected_client_count(ChanPid) -> ?tp(emqx_cm_connected_client_count_dec, #{}), - ets:delete(?CONN_CLIENT_TAB, Chan), + ets:delete(?CONN_CLIENT_TAB, ChanPid), ok. get_connected_client_count() -> diff --git a/test/emqx_broker_SUITE.erl b/test/emqx_broker_SUITE.erl index b6e0e4ef4..039aaf446 100644 --- a/test/emqx_broker_SUITE.erl +++ b/test/emqx_broker_SUITE.erl @@ -502,11 +502,11 @@ t_connect_client_never_negative({init, Config}) -> t_connect_client_never_negative(Config) when is_list(Config) -> ?assertEqual(0, emqx_cm:get_connected_client_count()), %% would go to -1 - Chan = {<<"clientid">>, list_to_pid("<0.0.1>")}, - emqx_cm:decrement_connected_client_count(Chan), + ChanPid = list_to_pid("<0.0.1>"), + emqx_cm:decrement_connected_client_count(ChanPid), ?assertEqual(0, emqx_cm:get_connected_client_count()), %% would be 0, if really went to -1 - emqx_cm:increment_connected_client_count(Chan), + emqx_cm:increment_connected_client_count(ChanPid), ?assertEqual(1, emqx_cm:get_connected_client_count()), ok; t_connect_client_never_negative({'end', _Config}) ->