From 17ed0f70aa9a565268418a4f93728a85a7333a1b Mon Sep 17 00:00:00 2001 From: Hampus Date: Mon, 31 Aug 2026 22:25:14 +0200 Subject: [PATCH] fix(gateway): release the user session count on a handoff fence (#2284) --- fluxer_gateway/src/session/session_lifecycle.erl | 2 +- fluxer_gateway/test/session_lifecycle_tests.erl | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fluxer_gateway/src/session/session_lifecycle.erl b/fluxer_gateway/src/session/session_lifecycle.erl index 11a3e430f..8d77ae453 100644 --- a/fluxer_gateway/src/session/session_lifecycle.erl +++ b/fluxer_gateway/src/session/session_lifecycle.erl @@ -56,6 +56,7 @@ any_hash_matches(AuthHash, Hashes) -> -spec terminate(term(), session_state()) -> ok. terminate(_Reason, State) -> + try_decrement_user_sessions(State), maybe_release_transferred_resources(State), try_cleanup_guild_monitors(State), try_cleanup_call_monitors(State), @@ -66,7 +67,6 @@ terminate(_Reason, State) -> maybe_release_transferred_resources(#{fenced := true}) -> ok; maybe_release_transferred_resources(State) -> - try_decrement_user_sessions(State), try_voice_disconnect(State), try_cleanup_presence(State), ok. diff --git a/fluxer_gateway/test/session_lifecycle_tests.erl b/fluxer_gateway/test/session_lifecycle_tests.erl index 80df8f111..ca825e4f5 100644 --- a/fluxer_gateway/test/session_lifecycle_tests.erl +++ b/fluxer_gateway/test/session_lifecycle_tests.erl @@ -445,6 +445,16 @@ resume_test_state(Overrides) -> Overrides ). +fenced_terminate_releases_the_user_session_count_test() -> + ok = session_abuse_protection:ensure_tables(), + UserId = 900201, + _ = ets:delete(session_user_counts, UserId), + ok = session_abuse_protection:increment_user_sessions(UserId), + ok = session_lifecycle:terminate(normal, #{ + fenced => true, user_id => UserId, guilds => #{}, calls => #{} + }), + ?assertEqual([], ets:lookup(session_user_counts, UserId)). + terminate_cleans_up_guild_monitors_test() -> GuildPid1 = spawn(fun test_wait_for_stop/0), GuildPid2 = spawn(fun test_wait_for_stop/0),