diff --git a/fluxer_gateway/src/guild/guild_member_list_subscribe.erl b/fluxer_gateway/src/guild/guild_member_list_subscribe.erl index b8c085057..7c0da31a9 100644 --- a/fluxer_gateway/src/guild/guild_member_list_subscribe.erl +++ b/fluxer_gateway/src/guild/guild_member_list_subscribe.erl @@ -179,7 +179,7 @@ maybe_ensure_store(ListId, SubsTab, State) -> ensure_channel_engine_for_subs(ListId, SubsTab, State) -> case map_size(guild_member_list_subs:get_list_subs(ListId, SubsTab)) > 0 of true -> guild_member_list_channel_engine:ensure(ListId, State); - false -> State + false -> guild_member_list_channel_engine:drop(ListId, State) end. -spec compute_ranges_to_sync([range()], [range()], boolean()) -> [range()]. diff --git a/fluxer_gateway/test/guild_member_list_tests.erl b/fluxer_gateway/test/guild_member_list_tests.erl index 6f9f256da..2d609390c 100644 --- a/fluxer_gateway/test/guild_member_list_tests.erl +++ b/fluxer_gateway/test/guild_member_list_tests.erl @@ -96,6 +96,18 @@ unsubscribe_last_session_drops_channel_store_test() -> ?assertNot(maps:is_key(<<"500">>, Engines)), ?assertEqual(undefined, ets:info(Ref, name)). +empty_ranges_subscribe_drops_channel_engine_test() -> + Ref = guild_member_list_engine:new(), + State = (base_state(make_subs_tab([{<<"500">>, <<"s1">>, [{0, 99}]}])))#{ + channel_member_list_engines => #{<<"500">> => Ref} + }, + {NewState, _ShouldSync, _Ranges} = guild_member_list:subscribe_ranges( + <<"s1">>, <<"500">>, [], State + ), + Engines = maps:get(channel_member_list_engines, NewState, #{}), + ?assertNot(maps:is_key(<<"500">>, Engines)), + ?assertEqual(undefined, ets:info(Ref, name)). + broadcast_channel_list_dispatches_sync_immediately_test() -> with_sync_dispatch_mock(fun run_broadcast_channel_list_dispatches_sync_immediately/0).