Mercurial > hg > nginx
changeset 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 | a2fbae359828 |
files | src/event/quic/ngx_event_quic.h src/event/quic/ngx_event_quic_frames.c |
diffstat | 2 files changed, 21 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic.h Mon Feb 14 14:53:46 2022 +0300 +++ b/src/event/quic/ngx_event_quic.h Mon Feb 14 14:54:34 2022 +0300 @@ -51,7 +51,9 @@ typedef struct { uint64_t size; uint64_t offset; + uint64_t last_offset; ngx_chain_t *chain; + ngx_chain_t **last_chain; } ngx_quic_buffer_t;
--- a/src/event/quic/ngx_event_quic_frames.c Mon Feb 14 14:53:46 2022 +0300 +++ b/src/event/quic/ngx_event_quic_frames.c Mon Feb 14 14:54:34 2022 +0300 @@ -421,6 +421,10 @@ qb->offset += n; } + if (qb->offset >= qb->last_offset) { + qb->last_chain = NULL; + } + qb->chain = *ll; *ll = NULL; @@ -462,6 +466,10 @@ if (qb->chain == NULL) { qb->offset = offset; } + + if (qb->offset >= qb->last_offset) { + qb->last_chain = NULL; + } } @@ -493,8 +501,14 @@ 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 @@ } } + qb->last_offset = base; + qb->last_chain = chain; + return in; }