+43
−1
+15
−0
Loading
The listener's registry purge only removed Closed children, so every
abandoned connection stayed in memory forever (~200 kB each):
- a received CONNECTION_CLOSE leaves the child Draining, never Closed
- the idle timeout was only negotiated, never enforced; our own
keepalive PINGs even refreshed _last_activity of a vanished peer
- ~quic() sent no CONNECTION_CLOSE, so a client dropping a connection
(paritypp's socket.reset()) never told the server
Track the last successfully processed frame in _last_recv_ticks and let
the purge also drop children that finished draining (3s) or stayed
silent past _max_idle_timeout. ~quic() now closes non-child connections.
Seen as steadily growing RSS of fenrirds and mediadb in cluster mode.
Co-Authored-By:
Claude Opus 5.5 <noreply@anthropic.com>