summaryrefslogtreecommitdiff
path: root/src/mod_muc_room.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2019-06-25 16:41:47 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2019-06-25 16:41:47 +0200
commit7b35690bc9a6d4714234d7a6cffc15e9478bcc31 (patch)
treed8b75d4b974b99a22a6f115f1b7d1adef1b9ce52 /src/mod_muc_room.erl
parentDon't propagate downstream already handled message (diff)
Store muc_subscribers in process dict if get_subscribed_rooms not available
Diffstat (limited to 'src/mod_muc_room.erl')
-rw-r--r--src/mod_muc_room.erl20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 9332b698..11b72d93 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -540,7 +540,13 @@ handle_sync_event({change_config, Config}, _From,
{reply, {ok, NSD#state.config}, StateName, NSD};
handle_sync_event({change_state, NewStateData}, _From,
StateName, _StateData) ->
- erlang:put(muc_subscribers, NewStateData#state.subscribers),
+ Mod = gen_mod:db_mod(NewStateData#state.server_host, mod_muc),
+ case erlang:function_exported(Mod, get_subscribed_rooms, 3) of
+ true ->
+ ok;
+ _ ->
+ erlang:put(muc_subscribers, NewStateData#state.subscribers)
+ end,
{reply, {ok, NewStateData}, StateName, NewStateData};
handle_sync_event({process_item_change, Item, UJID}, _From, StateName, StateData) ->
case process_item_change(Item, StateData, UJID) of
@@ -4367,7 +4373,14 @@ store_room(StateData) ->
store_room(StateData, []).
store_room(StateData, ChangesHints) ->
% Let store persistent rooms or on those backends that have get_subscribed_rooms
- erlang:put(muc_subscribers, StateData#state.subscribers),
+ Mod = gen_mod:db_mod(StateData#state.server_host, mod_muc),
+ HasGSR = erlang:function_exported(Mod, get_subscribed_rooms, 3),
+ case HasGSR of
+ true ->
+ ok;
+ _ ->
+ erlang:put(muc_subscribers, StateData#state.subscribers)
+ end,
ShouldStore = case (StateData#state.config)#config.persistent of
true ->
true;
@@ -4376,8 +4389,7 @@ store_room(StateData, ChangesHints) ->
[] ->
false;
_ ->
- Mod = gen_mod:db_mod(StateData#state.server_host, mod_muc),
- erlang:function_exported(Mod, get_subscribed_rooms, 3)
+ HasGSR
end
end,
if ShouldStore ->