diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-09-09 00:21:36 +0200 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-09-09 00:21:36 +0200 |
commit | d222fed2285d9ff630c5b230118f20dca2279cbd (patch) | |
tree | b6264b69a258f6e0793b580f6a3e16aff1f35c3c /src | |
parent | Revert "Don't log an [error] message if Elixir is missing" (diff) |
XEP-0198: Cancel timer when waiting for resumption
If an ACK timer is active while going into the 'wait_for_resume' state,
cancel that timer.
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 09df739b4..1bcb77e7f 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1772,7 +1772,7 @@ handle_info(close, StateName, StateData) -> ?DEBUG("Timeout waiting for stream management acknowledgement of ~s", [jid:to_string(StateData#state.jid)]), close(self()), - fsm_next_state(StateName, StateData); + fsm_next_state(StateName, StateData#state{mgmt_ack_timer = undefined}); handle_info({_Ref, {resume, OldStateData}}, StateName, StateData) -> %% This happens if the resume_session/1 request timed out; the new session %% now receives the late response. @@ -2495,6 +2495,12 @@ fsm_next_state(wait_for_resume, #state{mgmt_timeout = 0} = StateData) -> {stop, normal, StateData}; fsm_next_state(wait_for_resume, #state{mgmt_pending_since = undefined} = StateData) -> + case StateData of + #state{mgmt_ack_timer = undefined} -> + ok; + #state{mgmt_ack_timer = Timer} -> + erlang:cancel_timer(Timer) + end, ?INFO_MSG("Waiting for resumption of stream for ~s", [jid:to_string(StateData#state.jid)]), {next_state, wait_for_resume, |