cloudflare / cloudflare/quiche
Control frames not marked as lost on old path after migration
- Dominant language
- Rust
- Stars
- 11.8k
- Forks
- 1.1k
- Avg merge
- 21h 9m
- Merged PRs (30d)
- 6
Description
After migration, the server may have unacknowledged packets on the old path carrying control frames that are never retransmitted.
Neither retransmission mechanism covers these frames:
**ACK-based** loss detection does not fire on the old path.
On the old path, `newly_acked` is always empty so `on_ack_received` returns early without calling `detect_lost_packets`.
**PTO-based** retransmission skips control frames.
The PTO filter only selects packets where `has_data` is true, so control frames are excluded.
Affected frames are: `RESET_STREAM`, `STOP_SENDING`, `MAX_STREAM_DATA`, `MAX_DATA`, `MAX_STREAMS`, `RETIRE_CONNECTION_ID`, `NEW_CONNECTION_ID`
This can lead to **indefinite stalls**.
I will share my unit tests soon.
Contributor guide
Assessment
This issue has not been assessed yet.