summaryrefslogtreecommitdiff
path: root/src/mod_muc_room.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-05-11 19:27:56 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-05-11 19:27:56 +0300
commit3d8711f708bbd7bb25b2b8b5a1714d775199a026 (patch)
tree6e12f43b9f8401b150399a39688b41503148af3e /src/mod_muc_room.erl
parentHandle TCP errors in websockets (diff)
Avoid late arrival of get_disco_item response
Diffstat (limited to 'src/mod_muc_room.erl')
-rw-r--r--src/mod_muc_room.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 94c43019..2d386512 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -512,7 +512,7 @@ handle_event({set_affiliations, Affiliations},
handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.
-handle_sync_event({get_disco_item, Filter, JID, Lang}, _From, StateName, StateData) ->
+handle_sync_event({get_disco_item, Filter, JID, Lang, Time}, _From, StateName, StateData) ->
Len = maps:size(StateData#state.nicks),
Reply = case (Filter == all) or (Filter == Len) or ((Filter /= 0) and (Len /= 0)) of
true ->
@@ -521,10 +521,17 @@ handle_sync_event({get_disco_item, Filter, JID, Lang}, _From, StateName, StateDa
false ->
false
end,
- {reply, Reply, StateName, StateData};
-%% This clause is only for backwards compatibility
+ CurrentTime = erlang:monotonic_time(millisecond),
+ if CurrentTime < Time ->
+ {reply, Reply, StateName, StateData};
+ true ->
+ {next_state, StateName, StateData}
+ end;
+%% These two clauses are only for backward compatibility with nodes running old code
handle_sync_event({get_disco_item, JID, Lang}, From, StateName, StateData) ->
handle_sync_event({get_disco_item, any, JID, Lang}, From, StateName, StateData);
+handle_sync_event({get_disco_item, Filter, JID, Lang}, From, StateName, StateData) ->
+ handle_sync_event({get_disco_item, Filter, JID, Lang, infinity}, From, StateName, StateData);
handle_sync_event(get_config, _From, StateName,
StateData) ->
{reply, {ok, StateData#state.config}, StateName,