diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2019-06-25 16:41:47 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2019-06-25 16:41:47 +0200 |
commit | 7b35690bc9a6d4714234d7a6cffc15e9478bcc31 (patch) | |
tree | d8b75d4b974b99a22a6f115f1b7d1adef1b9ce52 /src/mod_muc_room.erl | |
parent | Don'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.erl | 20 |
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 -> |