diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 53f02507f..8d2e6e39f 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1772,35 +1772,32 @@ presence_update(From, Packet, StateData) -> FromUnavail = (StateData#state.pres_last == undefined), ?DEBUG("from unavail = ~p~n", [FromUnavail]), NewState = + NewStateData = StateData#state{pres_last = Packet, + pres_timestamp = Timestamp}, if FromUnavail -> ejabberd_hooks:run(user_available_hook, - StateData#state.server, - [StateData#state.jid]), + NewStateData#state.server, + [NewStateData#state.jid]), if NewPriority >= 0 -> - resend_offline_messages(StateData), - resend_subscription_requests(StateData); + resend_offline_messages(NewStateData), + resend_subscription_requests(NewStateData); true -> ok end, - presence_broadcast_first( - From, StateData#state{pres_last = Packet, - pres_timestamp = Timestamp - }, Packet); + presence_broadcast_first(From, NewStateData, Packet); true -> - presence_broadcast_to_trusted(StateData, + presence_broadcast_to_trusted(NewStateData, From, - StateData#state.pres_f, - StateData#state.pres_a, + NewStateData#state.pres_f, + NewStateData#state.pres_a, Packet), if OldPriority < 0, NewPriority >= 0 -> - resend_offline_messages(StateData); + resend_offline_messages(NewStateData); true -> ok end, - StateData#state{pres_last = Packet, - pres_timestamp = Timestamp - } + NewStateData end, NewState end.