Skip to content

quic improvements#2109

Open
birydrad wants to merge 12 commits intotestnetfrom
quic3
Open

quic improvements#2109
birydrad wants to merge 12 commits intotestnetfrom
quic3

Conversation

@birydrad
Copy link
Contributor

  • GSO, GRO, mmsg support
  • Query timeouts
  • Fair queues for streams and connections
  • No linear scans
  • Default congestion control is bbr
  • Multiple clients supported in bench-rldp

@github-actions
Copy link

  • quic/quic-pimpl.cpp:437-443streams_[sid] is mutated on NGTCP2_ERR_STREAM_DATA_BLOCKED/NGTCP2_ERR_STREAM_SHUT_WR without guarding sid != -1. If there are no ready streams and ngtcp2 returns those errors for a control-only write, this inserts a fake stream with id -1 and marks it blocked/closed, which can corrupt scheduling state. Consider guarding or handling the sid == -1 case explicitly.
  • quic/quic-pimpl.cpp:607-612 — flow‑control credits (extend_max_stream_offset / extend_max_offset) are granted before callback_->on_stream_data. If the callback returns error and you shutdown the stream, you’ve already opened more credit, letting the peer continue sending after app‑level rejection. If that’s not intended, move the credit extension after successful processing (or send RESET/STOP_SENDING first).
  • test/net/test-quic-sender.cpp:959-1031 — fairness test sends ~100MB total and asserts avg completion ratio < 1.5. This is sensitive to host load and offload availability and could be flaky in CI. Consider shrinking payloads, loosening bounds, or gating/skipping based on environment/offload support.

@github-actions
Copy link

  • Potentially invalid write flags: quic/quic-pimpl.cpp:388-403 unconditionally ORs NGTCP2_WRITE_STREAM_FLAG_MORE even when sid == -1 (no stream data) and when FIN is pending. This can violate ngtcp2’s expectations (MORE without a stream) and may suppress FIN or return errors, causing spurious disconnects. Consider setting MORE only when sid != -1 and you actually intend another write for the same packet; clear it on the final write.
  • Buffered data can become unbounded after remote shutdown: quic/quic-pimpl.cpp:507-523 allows buffer_stream even after is_write_closed is set in quic/quic-pimpl.cpp:414-416. Because is_stream_ready filters out write-closed streams, that data will never flush and can grow unbounded. Return an error (or drop/close) when is_write_closed is true.

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.

1 participant