diff --git a/include/internal/quic_txpim.h b/include/internal/quic_txpim.h index 3415230c727064..0f1f11c63095c2 100644 --- a/include/internal/quic_txpim.h +++ b/include/internal/quic_txpim.h @@ -40,6 +40,7 @@ typedef struct quic_txpim_pkt_st { unsigned int had_max_streams_bidi_frame : 1; unsigned int had_max_streams_uni_frame : 1; unsigned int had_ack_frame : 1; + unsigned int had_conn_close : 1; /* Private data follows. */ } QUIC_TXPIM_PKT; diff --git a/ssl/quic/quic_txp.c b/ssl/quic/quic_txp.c index 0f6fe140ece31f..e2812af8ee5954 100644 --- a/ssl/quic/quic_txp.c +++ b/ssl/quic/quic_txp.c @@ -1806,6 +1806,7 @@ static int txp_generate_pre_token(OSSL_QUIC_TX_PACKETISER *txp, if (!tx_helper_commit(h)) return 0; + tpkt->had_conn_close = 1; *can_be_non_inflight = 0; } else { tx_helper_rollback(h); @@ -2946,6 +2947,9 @@ static int txp_pkt_commit(OSSL_QUIC_TX_PACKETISER *txp, if (tpkt->had_ack_frame) txp->want_ack &= ~(1UL << pn_space); + if (tpkt->had_conn_close) + txp->want_conn_close = 0; + /* * Decrement probe request counts if we have sent a packet that meets * the requirement of a probe, namely being ACK-eliciting. diff --git a/ssl/quic/quic_txpim.c b/ssl/quic/quic_txpim.c index 3a7662292b9aa3..716a0141ab5646 100644 --- a/ssl/quic/quic_txpim.c +++ b/ssl/quic/quic_txpim.c @@ -115,6 +115,7 @@ static void txpim_clear(QUIC_TXPIM_PKT_EX *ex) ex->public.had_max_streams_bidi_frame = 0; ex->public.had_max_streams_uni_frame = 0; ex->public.had_ack_frame = 0; + ex->public.had_conn_close = 0; } QUIC_TXPIM_PKT *ossl_quic_txpim_pkt_alloc(QUIC_TXPIM *txpim)