aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2018-07-17 20:50:58 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2018-07-17 20:50:58 +0200
commit68c9328a9c9c74df79e66d008a1d25ff64cfd33f (patch)
treead78006dfd881ff0b09a54a5132239c0fce01e66
parentmod_http_upload: Add "Allow" to OPTIONS response (diff)
Move cancel_timer/1 function into 'misc' module
-rw-r--r--src/ejabberd_bosh.erl14
-rw-r--r--src/ejabberd_captcha.erl8
-rw-r--r--src/ejabberd_http_ws.erl10
-rw-r--r--src/ejabberd_system_monitor.erl17
-rw-r--r--src/eldap.erl27
-rw-r--r--src/misc.erl15
-rw-r--r--src/mod_http_upload.erl13
-rw-r--r--src/mod_ping.erl12
-rw-r--r--src/mod_proxy65_stream.erl4
-rw-r--r--src/mod_sip_registrar.erl4
-rw-r--r--src/mod_stream_mgmt.erl15
11 files changed, 46 insertions, 93 deletions
diff --git a/src/ejabberd_bosh.erl b/src/ejabberd_bosh.erl
index cf83fbe5c..dcb1943e3 100644
--- a/src/ejabberd_bosh.erl
+++ b/src/ejabberd_bosh.erl
@@ -404,7 +404,7 @@ active(#body{attrs = Attrs, size = Size} = Req, From,
{next_state, active,
State2#state{shaped_receivers = Q}}
catch error:full ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
RID = get_attr(rid, Attrs),
reply_stop(State1,
#body{http_reason = <<"Too many requests">>,
@@ -552,7 +552,7 @@ handle_sync_event({send_xml, El}, _From, StateName,
State2 = case p1_queue:out(State1#state.shaped_receivers)
of
{{value, {TRef, From, Body}}, Q} ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
p1_fsm:send_event(self(), {Body, From}),
State1#state{shaped_receivers = Q};
_ -> State1
@@ -1035,12 +1035,8 @@ buf_out(Buf, I, Els) ->
{empty, _} -> buf_out(Buf, 0, Els)
end.
-cancel_timer(TRef) when is_reference(TRef) ->
- p1_fsm:cancel_timer(TRef);
-cancel_timer(_) -> false.
-
restart_timer(TRef, Timeout, Msg) ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
erlang:start_timer(timer:seconds(Timeout), self(), Msg).
restart_inactivity_timer(#state{inactivity_timeout =
@@ -1057,7 +1053,7 @@ restart_inactivity_timer(#state{inactivity_timer =
stop_inactivity_timer(#state{inactivity_timer = TRef} =
State) ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
State#state{inactivity_timer = undefined}.
restart_wait_timer(#state{wait_timer = TRef,
@@ -1067,7 +1063,7 @@ restart_wait_timer(#state{wait_timer = TRef,
State#state{wait_timer = NewTRef}.
stop_wait_timer(#state{wait_timer = TRef} = State) ->
- cancel_timer(TRef), State#state{wait_timer = undefined}.
+ misc:cancel_timer(TRef), State#state{wait_timer = undefined}.
start_shaper_timer(Timeout) ->
erlang:start_timer(Timeout, self(), shaper_timeout).
diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl
index a0c731c9a..f366b4175 100644
--- a/src/ejabberd_captcha.erl
+++ b/src/ejabberd_captcha.erl
@@ -517,11 +517,7 @@ recv_data(Port, TRef, Buf) ->
end.
return(Port, TRef, Result) ->
- case erlang:cancel_timer(TRef) of
- false ->
- receive {timeout, TRef, _} -> ok after 0 -> ok end;
- _ -> ok
- end,
+ misc:cancel_timer(TRef),
catch port_close(Port),
Result.
@@ -561,7 +557,7 @@ check_captcha(Id, ProvidedKey) ->
case ets:lookup(captcha, Id) of
[#captcha{pid = Pid, args = Args, key = ValidKey, tref = Tref}] ->
ets:delete(captcha, Id),
- erlang:cancel_timer(Tref),
+ misc:cancel_timer(Tref),
if ValidKey == ProvidedKey ->
callback(captcha_succeed, Pid, Args),
captcha_valid;
diff --git a/src/ejabberd_http_ws.erl b/src/ejabberd_http_ws.erl
index 669041c66..a9d98b882 100644
--- a/src/ejabberd_http_ws.erl
+++ b/src/ejabberd_http_ws.erl
@@ -256,7 +256,7 @@ handle_info({timeout, Timer, _}, StateName,
#state{ping_timer = Timer, ws = {_, WsPid}} = StateData) ->
case StateData#state.pong_expected of
false ->
- cancel_timer(StateData#state.ping_timer),
+ misc:cancel_timer(StateData#state.ping_timer),
PingTimer = erlang:start_timer(StateData#state.ping_interval,
self(), []),
WsPid ! {ping, <<>>},
@@ -282,10 +282,10 @@ terminate(_Reason, _StateName, StateData) ->
ok.
setup_timers(StateData) ->
- cancel_timer(StateData#state.timer),
+ misc:cancel_timer(StateData#state.timer),
Timer = erlang:start_timer(StateData#state.timeout,
self(), []),
- cancel_timer(StateData#state.ping_timer),
+ misc:cancel_timer(StateData#state.ping_timer),
PingTimer = case StateData#state.ping_interval of
0 -> StateData#state.ping_timer;
V -> erlang:start_timer(V, self(), [])
@@ -293,10 +293,6 @@ setup_timers(StateData) ->
StateData#state{timer = Timer, ping_timer = PingTimer,
pong_expected = false}.
-cancel_timer(Timer) ->
- erlang:cancel_timer(Timer),
- receive {timeout, Timer, _} -> ok after 0 -> ok end.
-
get_human_html_xmlel() ->
Heading = <<"ejabberd ", (misc:atom_to_binary(?MODULE))/binary>>,
#xmlel{name = <<"html">>,
diff --git a/src/ejabberd_system_monitor.erl b/src/ejabberd_system_monitor.erl
index 65aad8d7f..cf50209fb 100644
--- a/src/ejabberd_system_monitor.erl
+++ b/src/ejabberd_system_monitor.erl
@@ -88,7 +88,7 @@ handle_event({set_alarm, {system_memory_high_watermark, _}}, State) ->
handle_overload(State),
{ok, restart_timer(State)};
handle_event({clear_alarm, system_memory_high_watermark}, State) ->
- cancel_timer(State#state.tref),
+ misc:cancel_timer(State#state.tref),
{ok, State#state{tref = undefined}};
handle_event({set_alarm, {process_memory_high_watermark, Pid}}, State) ->
case proc_stat(Pid, get_app_pids()) of
@@ -220,23 +220,10 @@ proc_stat(Pid, AppPids) ->
-spec restart_timer(#state{}) -> #state{}.
restart_timer(State) ->
- cancel_timer(State#state.tref),
+ misc:cancel_timer(State#state.tref),
TRef = erlang:start_timer(?CHECK_INTERVAL, self(), handle_overload),
State#state{tref = TRef}.
--spec cancel_timer(reference()) -> ok.
-cancel_timer(undefined) ->
- ok;
-cancel_timer(TRef) ->
- case erlang:cancel_timer(TRef) of
- false ->
- receive {timeout, TRef, _} -> ok
- after 0 -> ok
- end;
- _ ->
- ok
- end.
-
-spec format_apps(dict:dict()) -> io:data().
format_apps(Apps) ->
AppList = lists:reverse(lists:keysort(2, dict:to_list(Apps))),
diff --git a/src/eldap.erl b/src/eldap.erl
index fc3b8a29d..760f2557b 100644
--- a/src/eldap.erl
+++ b/src/eldap.erl
@@ -659,7 +659,7 @@ handle_info({Tag, _Socket, Data}, connecting, S)
{next_state, connecting, S};
handle_info({Tag, _Socket, Data}, wait_bind_response, S)
when Tag == tcp; Tag == ssl ->
- cancel_timer(S#eldap.bind_timer),
+ misc:cancel_timer(S#eldap.bind_timer),
case catch recvd_wait_bind_response(Data, S) of
bound -> dequeue_commands(S);
{fail_bind, Reason} ->
@@ -847,14 +847,14 @@ recvd_packet(Pkt, S) ->
if Reason == success; Reason == sizeLimitExceeded ->
{Res, Ref} = polish(Result_so_far),
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
{reply,
#eldap_search_result{entries = Res,
referrals = Ref},
From, S#eldap{dict = New_dict}};
true ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
{reply, {error, Reason}, From,
S#eldap{dict = New_dict}}
end;
@@ -863,37 +863,37 @@ recvd_packet(Pkt, S) ->
{ok, S#eldap{dict = New_dict}};
{addRequest, {addResponse, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{delRequest, {delResponse, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{modifyRequest, {modifyResponse, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{modDNRequest, {modDNResponse, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{bindRequest, {bindResponse, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_bind_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{extendedReq, {extendedResp, Result}} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
Reply = check_extended_reply(Result, From),
{reply, Reply, From, S#eldap{dict = New_dict}};
{OtherName, OtherResult} ->
New_dict = dict:erase(Id, Dict),
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
{reply,
{error, {invalid_result, OtherName, OtherResult}},
From, S#eldap{dict = New_dict}}
@@ -968,16 +968,11 @@ check_id(_, _) -> throw({error, wrong_bind_id}).
%% General Helpers
%%-----------------------------------------------------------------------
-cancel_timer(Timer) ->
- erlang:cancel_timer(Timer),
- receive {timeout, Timer, _} -> ok after 0 -> ok end.
-
-
close_and_retry(S, Timeout) ->
catch (S#eldap.sockmod):close(S#eldap.fd),
Queue = dict:fold(fun (_Id,
[{Timer, Command, From, _Name} | _], Q) ->
- cancel_timer(Timer),
+ misc:cancel_timer(Timer),
queue:in_r({Command, From}, Q);
(_, _, Q) -> Q
end,
diff --git a/src/misc.erl b/src/misc.erl
index abd0691ee..5ef71c41b 100644
--- a/src/misc.erl
+++ b/src/misc.erl
@@ -36,7 +36,7 @@
compile_exprs/2, join_atoms/2, try_read_file/1, get_descr/2,
css_dir/0, img_dir/0, js_dir/0, msgs_dir/0, sql_dir/0, lua_dir/0,
read_css/1, read_img/1, read_js/1, read_lua/1, try_url/1,
- intersection/2, format_val/1]).
+ intersection/2, format_val/1, cancel_timer/1]).
%% Deprecated functions
-export([decode_base64/1, encode_base64/1]).
@@ -308,6 +308,19 @@ format_val(YAML) ->
catch _:_ -> io_lib:format("~p", [YAML])
end.
+-spec cancel_timer(reference()) -> ok.
+cancel_timer(TRef) when is_reference(TRef) ->
+ case erlang:cancel_timer(TRef) of
+ false ->
+ receive {timeout, TRef, _} -> ok
+ after 0 -> ok
+ end;
+ _ ->
+ ok
+ end;
+cancel_timer(_) ->
+ ok.
+
%%%===================================================================
%%% Internal functions
%%%===================================================================
diff --git a/src/mod_http_upload.erl b/src/mod_http_upload.erl
index 6db8bd256..09fd66d3e 100644
--- a/src/mod_http_upload.erl
+++ b/src/mod_http_upload.erl
@@ -299,7 +299,7 @@ handle_call({use_slot, Slot, Size}, _From,
docroot = DocRoot} = State) ->
case get_slot(Slot, State) of
{ok, {Size, TRef}} ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
NewState = del_slot(Slot, State),
Path = str:join([DocRoot | Slot], <<$/>>),
{reply,
@@ -703,17 +703,6 @@ replace_special_chars(S) ->
yield_content_type(<<"">>) -> ?DEFAULT_CONTENT_TYPE;
yield_content_type(Type) -> Type.
--spec cancel_timer(reference()) -> ok.
-cancel_timer(TRef) ->
- case erlang:cancel_timer(TRef) of
- false ->
- receive {timeout, TRef, _} -> ok
- after 0 -> ok
- end;
- _ ->
- ok
- end.
-
-spec iq_disco_info(binary(), binary(), binary(), [xdata()]) -> disco_info().
iq_disco_info(Host, Lang, Name, AddInfo) ->
Form = case gen_mod:get_module_opt(Host, ?MODULE, max_size) of
diff --git a/src/mod_ping.erl b/src/mod_ping.erl
index 6df9aa65a..88146b14b 100644
--- a/src/mod_ping.erl
+++ b/src/mod_ping.erl
@@ -228,7 +228,7 @@ add_timer(JID, Interval, Timers) ->
LJID = jid:tolower(JID),
NewTimers = case maps:find(LJID, Timers) of
{ok, OldTRef} ->
- cancel_timer(OldTRef),
+ misc:cancel_timer(OldTRef),
maps:remove(LJID, Timers);
_ -> Timers
end,
@@ -241,19 +241,11 @@ del_timer(JID, Timers) ->
LJID = jid:tolower(JID),
case maps:find(LJID, Timers) of
{ok, TRef} ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
maps:remove(LJID, Timers);
_ -> Timers
end.
--spec cancel_timer(reference()) -> ok.
-cancel_timer(TRef) ->
- case erlang:cancel_timer(TRef) of
- false ->
- receive {timeout, TRef, _} -> ok after 0 -> ok end;
- _ -> ok
- end.
-
depends(_Host, _Opts) ->
[].
diff --git a/src/mod_proxy65_stream.erl b/src/mod_proxy65_stream.erl
index 0646e28c8..4e7aa0334 100644
--- a/src/mod_proxy65_stream.erl
+++ b/src/mod_proxy65_stream.erl
@@ -195,7 +195,7 @@ stream_established(_Data, StateData) ->
%% SOCKS5 packets.
handle_info({tcp, _S, Data}, StateName, StateData)
when StateName /= wait_for_activation ->
- erlang:cancel_timer(StateData#state.timer),
+ misc:cancel_timer(StateData#state.timer),
TRef = erlang:send_after(?WAIT_TIMEOUT, self(), stop),
p1_fsm:send_event(self(), Data),
{next_state, StateName, StateData#state{timer = TRef}};
@@ -203,7 +203,7 @@ handle_info({tcp, _S, Data}, StateName, StateData)
handle_info({activate, PeerPid, PeerSocket, IJid, TJid},
wait_for_activation, StateData) ->
erlang:monitor(process, PeerPid),
- erlang:cancel_timer(StateData#state.timer),
+ misc:cancel_timer(StateData#state.timer),
MySocket = StateData#state.socket,
Shaper = StateData#state.shaper,
Host = StateData#state.host,
diff --git a/src/mod_sip_registrar.erl b/src/mod_sip_registrar.erl
index d7b959435..dfb9a50f0 100644
--- a/src/mod_sip_registrar.erl
+++ b/src/mod_sip_registrar.erl
@@ -550,8 +550,8 @@ close_socket(#sip_session{socket = SIPSocket}) ->
delete_session(#sip_session{reg_tref = RegTRef,
flow_tref = FlowTRef,
conn_mref = MRef} = Session) ->
- erlang:cancel_timer(RegTRef),
- catch erlang:cancel_timer(FlowTRef),
+ misc:cancel_timer(RegTRef),
+ misc:cancel_timer(FlowTRef),
catch erlang:demonitor(MRef, [flush]),
mnesia:dirty_delete_object(Session).
diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl
index a37b6538c..f897a2794 100644
--- a/src/mod_stream_mgmt.erl
+++ b/src/mod_stream_mgmt.erl
@@ -717,7 +717,7 @@ send(#{mod := Mod} = State, Pkt) ->
-spec restart_pending_timer(state(), non_neg_integer()) -> state().
restart_pending_timer(#{mgmt_pending_timer := TRef} = State, NewTimeout) ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
NewTRef = erlang:start_timer(timer:seconds(NewTimeout), self(),
pending_timeout),
State#{mgmt_pending_timer => NewTRef};
@@ -726,22 +726,11 @@ restart_pending_timer(State, _NewTimeout) ->
-spec cancel_ack_timer(state()) -> state().
cancel_ack_timer(#{mgmt_ack_timer := TRef} = State) ->
- cancel_timer(TRef),
+ misc:cancel_timer(TRef),
maps:remove(mgmt_ack_timer, State);
cancel_ack_timer(State) ->
State.
--spec cancel_timer(reference()) -> ok.
-cancel_timer(TRef) ->
- case erlang:cancel_timer(TRef) of
- false ->
- receive {timeout, TRef, _} -> ok
- after 0 -> ok
- end;
- _ ->
- ok
- end.
-
-spec bounce_message_queue() -> ok.
bounce_message_queue() ->
receive {route, Pkt} ->