]> granicus.if.org Git - ejabberd/commitdiff
XEP-0198: Cancel timer when waiting for resumption
authorHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 8 Sep 2016 22:21:36 +0000 (00:21 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 8 Sep 2016 22:21:36 +0000 (00:21 +0200)
If an ACK timer is active while going into the 'wait_for_resume' state,
cancel that timer.

src/ejabberd_c2s.erl

index 09df739b473355bded57aa9efa7ccba3405bf033..1bcb77e7f5fcdd296bd79bb0a94e655804611a86 100644 (file)
@@ -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,