fix(gateway): clamp a heartbeat ack to the session sequence (#2283)

This commit is contained in:
Hampus authored and GitHub committed 2026-08-31 22:23:43 +02:00
1 parent 4261cc2ea5
commit be3e12e60d
2 files changed
+15 -2

No files matched your search

@@ -280,13 +280,14 @@ handle_is_staff(State) ->
handle_heartbeat_ack(Seq, #{ack_seq := AckSeq} = State) when Seq < AckSeq ->
{reply, true, State};
handle_heartbeat_ack(Seq, #{buffer := Buffer} = State) ->
NewBuffer = drop_acked_buffer(Seq, Buffer),
AckedSeq = min(Seq, maps:get(seq, State, Seq)),
NewBuffer = drop_acked_buffer(AckedSeq, Buffer),
NewBytes =
case is_list(NewBuffer) of
true -> session_init:replay_buffer_bytes(NewBuffer);
false -> limited_deque:bytes(NewBuffer)
end,
NewState0 = State#{ack_seq => Seq, buffer => NewBuffer, buffer_bytes => NewBytes},
NewState0 = State#{ack_seq => AckedSeq, buffer => NewBuffer, buffer_bytes => NewBytes},
NewState = session_connection_guild:repair_stalled_guild_connects(NewState0),
{reply, true, NewState}.