diff --git a/src/transport/xqc_cid.h b/src/transport/xqc_cid.h index 39dbdf98..6a389d44 100644 --- a/src/transport/xqc_cid.h +++ b/src/transport/xqc_cid.h @@ -50,6 +50,7 @@ typedef struct xqc_cid_set_inner_s { }; xqc_cid_set_state_t set_state; uint32_t acked_unused; + uint32_t cids_blocked_sent; } xqc_cid_set_inner_t; typedef struct xqc_cid_set_s { diff --git a/src/transport/xqc_engine.c b/src/transport/xqc_engine.c index 6f0e87c0..fbd4d62a 100644 --- a/src/transport/xqc_engine.c +++ b/src/transport/xqc_engine.c @@ -743,11 +743,12 @@ xqc_engine_process_conn(xqc_connection_t *conn, xqc_usec_t now) /* not enough cid for new path id */ uint64_t path_id = conn->create_path_count; xqc_cid_set_inner_t *dcid_inner_set = xqc_get_path_cid_set(&conn->dcid_set, path_id); - if (dcid_inner_set && dcid_inner_set->unused_cnt == 0) { + if (dcid_inner_set && dcid_inner_set->unused_cnt == 0 && !dcid_inner_set->cids_blocked_sent) { rc = xqc_write_path_cids_blocked_to_packet(conn, path_id); if (rc) { xqc_log(conn->log, XQC_LOG_WARN, "|xqc_write_path_cids_blocked_to_packet error|ret:%ui|", ret); } + dcid_inner_set->cids_blocked_sent = 1; } }