mirror of
https://github.com/nginx/nginx.git
synced 2025-08-05 14:06:16 +08:00
QUIC: cleanup send context properly.
The patch resets ctx->frames queue, which may contain frames. It was possible that congestion or amplification limits prevented all frames to be sent. Retransmitted frames could be accounted twice as inflight: first time in ngx_quic_congestion_lost() called from ngx_quic_resend_frames(), and later from ngx_quic_discard_ctx().
This commit is contained in:
parent
a1473ce8b0
commit
68f7e9540a
@ -2254,6 +2254,15 @@ ngx_quic_discard_ctx(ngx_connection_t *c, enum ssl_encryption_level_t level)
|
|||||||
ngx_quic_free_frame(c, f);
|
ngx_quic_free_frame(c, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (!ngx_queue_empty(&ctx->frames)) {
|
||||||
|
q = ngx_queue_head(&ctx->frames);
|
||||||
|
ngx_queue_remove(q);
|
||||||
|
|
||||||
|
f = ngx_queue_data(q, ngx_quic_frame_t, queue);
|
||||||
|
ngx_quic_congestion_ack(c, f);
|
||||||
|
ngx_quic_free_frame(c, f);
|
||||||
|
}
|
||||||
|
|
||||||
ctx->send_ack = 0;
|
ctx->send_ack = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5677,6 +5686,7 @@ ngx_quic_congestion_lost(ngx_connection_t *c, ngx_quic_frame_t *f)
|
|||||||
cg = &qc->congestion;
|
cg = &qc->congestion;
|
||||||
|
|
||||||
cg->in_flight -= f->plen;
|
cg->in_flight -= f->plen;
|
||||||
|
f->plen = 0;
|
||||||
|
|
||||||
timer = f->last - cg->recovery_start;
|
timer = f->last - cg->recovery_start;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user