Mercurial > hg > nginx
comparison src/event/ngx_event_quic.c @ 8363:d3395396ce51 quic
Fixed packet retransmission.
Previously frames in ctx->sent queue could be lost.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Fri, 24 Apr 2020 17:20:37 +0300 |
parents | 44cac24aaa44 |
children | eee307399229 |
comparison
equal
deleted
inserted
replaced
8362:44cac24aaa44 | 8363:d3395396ce51 |
---|---|
2584 *waitp = 0; | 2584 *waitp = 0; |
2585 return NGX_OK; | 2585 return NGX_OK; |
2586 } | 2586 } |
2587 | 2587 |
2588 q = ngx_queue_head(&ctx->sent); | 2588 q = ngx_queue_head(&ctx->sent); |
2589 start = ngx_queue_data(q, ngx_quic_frame_t, queue); | |
2590 pn = start->pnum; | |
2591 f = start; | |
2592 | 2589 |
2593 do { | 2590 do { |
2591 start = ngx_queue_data(q, ngx_quic_frame_t, queue); | |
2592 | |
2593 wait = start->last + qc->tp.max_ack_delay - now; | |
2594 | |
2595 if ((ngx_msec_int_t) wait > 0) { | |
2596 break; | |
2597 } | |
2598 | |
2599 pn = start->pnum; | |
2600 | |
2594 ngx_queue_init(&range); | 2601 ngx_queue_init(&range); |
2595 | 2602 |
2596 /* send frames with same packet number to the wire */ | 2603 /* send frames with same packet number to the wire */ |
2597 do { | 2604 do { |
2598 f = ngx_queue_data(q, ngx_quic_frame_t, queue); | 2605 f = ngx_queue_data(q, ngx_quic_frame_t, queue); |
2611 | 2618 |
2612 ngx_queue_remove(&f->queue); | 2619 ngx_queue_remove(&f->queue); |
2613 ngx_queue_insert_tail(&range, &f->queue); | 2620 ngx_queue_insert_tail(&range, &f->queue); |
2614 | 2621 |
2615 } while (q != ngx_queue_sentinel(&ctx->sent)); | 2622 } while (q != ngx_queue_sentinel(&ctx->sent)); |
2616 | |
2617 wait = start->last + qc->tp.max_ack_delay - now; | |
2618 | |
2619 if ((ngx_msec_int_t) wait > 0) { | |
2620 break; | |
2621 } | |
2622 | 2623 |
2623 /* NGX_DONE is impossible here, such frames don't get into this queue */ | 2624 /* NGX_DONE is impossible here, such frames don't get into this queue */ |
2624 if (ngx_quic_send_frames(c, &range) != NGX_OK) { | 2625 if (ngx_quic_send_frames(c, &range) != NGX_OK) { |
2625 return NGX_ERROR; | 2626 return NGX_ERROR; |
2626 } | 2627 } |