If client acknowledged an Initial packet with CRYPTO frame and then
sent another Initial packet containing duplicate CRYPTO again, this
could result in resending frames off the empty send queue.
{
uint64_t last;
ngx_int_t rc;
+ ngx_quic_send_ctx_t *ctx;
ngx_quic_connection_t *qc;
ngx_quic_crypto_frame_t *f;
ngx_quic_frames_stream_t *fs;
/* speeding up handshake completion */
if (pkt->level == ssl_encryption_initial) {
- ngx_quic_resend_frames(c, ngx_quic_get_send_ctx(qc, pkt->level));
+ ctx = ngx_quic_get_send_ctx(qc, pkt->level);
+
+ if (!ngx_queue_empty(&ctx->sent)) {
+ ngx_quic_resend_frames(c, ctx);
+ }
}
return NGX_OK;