diff options
author | Vladimir Homutov <vl@nginx.com> | 2021-10-15 12:26:42 +0300 |
---|---|---|
committer | Vladimir Homutov <vl@nginx.com> | 2021-10-15 12:26:42 +0300 |
commit | 0cd45dea762d3fff535dededf1a4490730f6e7f8 (patch) | |
tree | 9e21bb4fa6c3d3304120f7b80dbb1afb25b94457 /src | |
parent | da28a4c6267b8b29d9188f89ab8fad6de08ea688 (diff) | |
download | nginx-0cd45dea762d3fff535dededf1a4490730f6e7f8.tar.gz nginx-0cd45dea762d3fff535dededf1a4490730f6e7f8.zip |
QUIC: optimized ack range processing.
The sent queue is sorted by packet number. It is possible to avoid
traversing full queue while handling ack ranges. It makes sense to
start traversing from the queue head (i.e. check oldest packets first).
Diffstat (limited to 'src')
-rw-r--r-- | src/event/quic/ngx_event_quic_ack.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c index 3e4bb6d4f..22697ccb6 100644 --- a/src/event/quic/ngx_event_quic_ack.c +++ b/src/event/quic/ngx_event_quic_ack.c @@ -223,14 +223,18 @@ ngx_quic_handle_ack_frame_range(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx, st->max_pn = NGX_TIMER_INFINITE; found = 0; - q = ngx_queue_last(&ctx->sent); + q = ngx_queue_head(&ctx->sent); while (q != ngx_queue_sentinel(&ctx->sent)) { f = ngx_queue_data(q, ngx_quic_frame_t, queue); - q = ngx_queue_prev(q); + q = ngx_queue_next(q); + + if (f->pnum > max) { + break; + } - if (f->pnum >= min && f->pnum <= max) { + if (f->pnum >= min) { ngx_quic_congestion_ack(c, f); switch (f->type) { |