Skip to content

Conversation

@Cyberalle
Copy link

…acket loss

The original implementation used a "last-write-wins" pattern that stored only the most recent datagram, causing approximately 75% packet loss in relay scenarios with multiple subscribers.

This change:

  • Replaces latest: Option<Datagram> with queue: VecDeque<Datagram>
  • Adds configurable buffer size (MAX_DATAGRAM_BUFFER = 1024)
  • Implements proper multi-reader support using absolute position tracking
  • Each reader maintains consumed_count to track its position independently
  • Buffer overflow drops oldest datagrams while preserving reader positions

This enables proper QUIC datagram relay for real-time media applications where packet throughput is critical.

…acket loss

The original implementation used a "last-write-wins" pattern that stored
only the most recent datagram, causing approximately 75% packet loss in
relay scenarios with multiple subscribers.

This change:
- Replaces `latest: Option<Datagram>` with `queue: VecDeque<Datagram>`
- Adds configurable buffer size (MAX_DATAGRAM_BUFFER = 1024)
- Implements proper multi-reader support using absolute position tracking
- Each reader maintains `consumed_count` to track its position independently
- Buffer overflow drops oldest datagrams while preserving reader positions

This enables proper QUIC datagram relay for real-time media applications
where packet throughput is critical.
- Add debug logging for SUBSCRIBE_OK handling to trace track_alias mapping
- Fix potential deadlock by releasing subscribes lock before acquiring alias_map lock
- Log alias_map state for troubleshooting datagram routing issues
- Convert extension header logging from info to debug level
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants