comparison 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
comparison
equal deleted inserted replaced
9013:b5656025ddb5 9014:8d11e2171697
419 419
420 limit -= n; 420 limit -= n;
421 qb->offset += n; 421 qb->offset += n;
422 } 422 }
423 423
424 if (qb->offset >= qb->last_offset) {
425 qb->last_chain = NULL;
426 }
427
424 qb->chain = *ll; 428 qb->chain = *ll;
425 *ll = NULL; 429 *ll = NULL;
426 430
427 return out; 431 return out;
428 } 432 }
460 } 464 }
461 465
462 if (qb->chain == NULL) { 466 if (qb->chain == NULL) {
463 qb->offset = offset; 467 qb->offset = offset;
464 } 468 }
469
470 if (qb->offset >= qb->last_offset) {
471 qb->last_chain = NULL;
472 }
465 } 473 }
466 474
467 475
468 ngx_chain_t * 476 ngx_chain_t *
469 ngx_quic_alloc_chain(ngx_connection_t *c) 477 ngx_quic_alloc_chain(ngx_connection_t *c)
491 u_char *p; 499 u_char *p;
492 uint64_t n, base; 500 uint64_t n, base;
493 ngx_buf_t *b; 501 ngx_buf_t *b;
494 ngx_chain_t *cl, **chain; 502 ngx_chain_t *cl, **chain;
495 503
496 base = qb->offset; 504 if (qb->last_chain && offset >= qb->last_offset) {
497 chain = &qb->chain; 505 base = qb->last_offset;
506 chain = qb->last_chain;
507
508 } else {
509 base = qb->offset;
510 chain = &qb->chain;
511 }
498 512
499 while (in && limit) { 513 while (in && limit) {
500 514
501 if (offset < base) { 515 if (offset < base) {
502 n = ngx_min((uint64_t) (in->buf->last - in->buf->pos), 516 n = ngx_min((uint64_t) (in->buf->last - in->buf->pos),
582 } 596 }
583 597
584 b->sync = 0; 598 b->sync = 0;
585 } 599 }
586 } 600 }
601
602 qb->last_offset = base;
603 qb->last_chain = chain;
587 604
588 return in; 605 return in;
589 } 606 }
590 607
591 608