Mercurial > hg > nginx
diff src/event/quic/ngx_event_quic_frames.c @ 9014:8d11e2171697 quic
QUIC: optimize insertion at the end of QUIC buffer.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 14 Feb 2022 14:54:34 +0300 |
parents | b5656025ddb5 |
children | 55b38514729b |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_frames.c +++ b/src/event/quic/ngx_event_quic_frames.c @@ -421,6 +421,10 @@ ngx_quic_read_buffer(ngx_connection_t *c qb->offset += n; } + if (qb->offset >= qb->last_offset) { + qb->last_chain = NULL; + } + qb->chain = *ll; *ll = NULL; @@ -462,6 +466,10 @@ ngx_quic_skip_buffer(ngx_connection_t *c if (qb->chain == NULL) { qb->offset = offset; } + + if (qb->offset >= qb->last_offset) { + qb->last_chain = NULL; + } } @@ -493,8 +501,14 @@ ngx_quic_write_buffer(ngx_connection_t * ngx_buf_t *b; ngx_chain_t *cl, **chain; - base = qb->offset; - chain = &qb->chain; + if (qb->last_chain && offset >= qb->last_offset) { + base = qb->last_offset; + chain = qb->last_chain; + + } else { + base = qb->offset; + chain = &qb->chain; + } while (in && limit) { @@ -585,6 +599,9 @@ ngx_quic_write_buffer(ngx_connection_t * } } + qb->last_offset = base; + qb->last_chain = chain; + return in; }