24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-14 22:00:16 +02:00

Merge pull request #931 from cclam0827/dev/mod_ping

change mod_ping Timers using maps instead of dict
This commit is contained in:
badlop 2016-04-22 13:07:03 +02:00
commit 2660dcabba

View File

@ -44,8 +44,6 @@
-define(DEFAULT_PING_INTERVAL, 60). -define(DEFAULT_PING_INTERVAL, 60).
-define(DICT, dict).
%% API %% API
-export([start_link/2, start_ping/2, stop_ping/2]). -export([start_link/2, start_ping/2, stop_ping/2]).
@ -65,7 +63,7 @@
ping_interval = ?DEFAULT_PING_INTERVAL :: non_neg_integer(), ping_interval = ?DEFAULT_PING_INTERVAL :: non_neg_integer(),
ping_ack_timeout = undefined :: non_neg_integer(), ping_ack_timeout = undefined :: non_neg_integer(),
timeout_action = none :: none | kill, timeout_action = none :: none | kill,
timers = (?DICT):new() :: ?TDICT}). timers = maps:new() :: map()}).
%%==================================================================== %%====================================================================
%% API %% API
@ -136,7 +134,7 @@ init([Host, Opts]) ->
ping_interval = PingInterval, ping_interval = PingInterval,
timeout_action = TimeoutAction, timeout_action = TimeoutAction,
ping_ack_timeout = PingAckTimeout, ping_ack_timeout = PingAckTimeout,
timers = (?DICT):new()}}. timers = maps:new()}}.
terminate(_Reason, #state{host = Host}) -> terminate(_Reason, #state{host = Host}) ->
ejabberd_hooks:delete(sm_remove_connection_hook, Host, ejabberd_hooks:delete(sm_remove_connection_hook, Host,
@ -229,20 +227,22 @@ user_send(Packet, _C2SState, JID, _From) ->
%%==================================================================== %%====================================================================
add_timer(JID, Interval, Timers) -> add_timer(JID, Interval, Timers) ->
LJID = jid:tolower(JID), LJID = jid:tolower(JID),
NewTimers = case (?DICT):find(LJID, Timers) of NewTimers = case maps:find(LJID, Timers) of
{ok, OldTRef} -> {ok, OldTRef} ->
cancel_timer(OldTRef), (?DICT):erase(LJID, Timers); cancel_timer(OldTRef),
_ -> Timers maps:remove(LJID, Timers);
_ -> Timers
end, end,
TRef = erlang:start_timer(Interval * 1000, self(), TRef = erlang:start_timer(Interval * 1000, self(),
{ping, JID}), {ping, JID}),
(?DICT):store(LJID, TRef, NewTimers). maps:put(LJID, TRef, NewTimers).
del_timer(JID, Timers) -> del_timer(JID, Timers) ->
LJID = jid:tolower(JID), LJID = jid:tolower(JID),
case (?DICT):find(LJID, Timers) of case maps:find(LJID, Timers) of
{ok, TRef} -> {ok, TRef} ->
cancel_timer(TRef), (?DICT):erase(LJID, Timers); cancel_timer(TRef),
maps:remove(LJID, Timers);
_ -> Timers _ -> Timers
end. end.