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 }