@@ -2243,7 +2243,6 @@ static int qcs_send(struct qcs *qcs, struct list *frms, uint64_t window_conn)
22432243 */
22442244static int qcc_io_send (struct qcc * qcc )
22452245{
2246- struct list frms = LIST_HEAD_INIT (frms );
22472246 /* Temporary list for QCS on error. */
22482247 struct list qcs_failed = LIST_HEAD_INIT (qcs_failed );
22492248 struct qcs * qcs , * qcs_tmp , * first_qcs = NULL ;
@@ -2337,7 +2336,7 @@ static int qcc_io_send(struct qcc *qcc)
23372336
23382337 if (!qfctl_rblocked (& qcc -> tx .fc ) &&
23392338 !qfctl_rblocked (& qcs -> tx .fc ) && window_conn > total ) {
2340- if ((ret = qcs_send (qcs , & frms , window_conn - total )) < 0 ) {
2339+ if ((ret = qcs_send (qcs , & qcc -> tx . frms , window_conn - total )) < 0 ) {
23412340 /* Temporarily remove QCS from send-list. */
23422341 LIST_DEL_INIT (& qcs -> el_send );
23432342 LIST_APPEND (& qcs_failed , & qcs -> el_send );
@@ -2361,7 +2360,7 @@ static int qcc_io_send(struct qcc *qcc)
23612360 /* Retry sending until no frame to send, data rejected or connection
23622361 * flow-control limit reached.
23632362 */
2364- while (qcc_send_frames (qcc , & frms ) == 0 && !qfctl_rblocked (& qcc -> tx .fc )) {
2363+ while (qcc_send_frames (qcc , & qcc -> tx . frms ) == 0 && !qfctl_rblocked (& qcc -> tx .fc )) {
23652364 window_conn = qfctl_rcap (& qcc -> tx .fc );
23662365 resent = 0 ;
23672366
@@ -2379,7 +2378,7 @@ static int qcc_io_send(struct qcc *qcc)
23792378 BUG_ON (resent > window_conn );
23802379
23812380 if (!qfctl_rblocked (& qcs -> tx .fc ) && window_conn > resent ) {
2382- if ((ret = qcs_send (qcs , & frms , window_conn - resent )) < 0 ) {
2381+ if ((ret = qcs_send (qcs , & qcc -> tx . frms , window_conn - resent )) < 0 ) {
23832382 LIST_DEL_INIT (& qcs -> el_send );
23842383 LIST_APPEND (& qcs_failed , & qcs -> el_send );
23852384 continue ;
@@ -2393,10 +2392,10 @@ static int qcc_io_send(struct qcc *qcc)
23932392
23942393 sent_done :
23952394 /* Deallocate frames that the transport layer has rejected. */
2396- if (!LIST_ISEMPTY (& frms )) {
2395+ if (!LIST_ISEMPTY (& qcc -> tx . frms )) {
23972396 struct quic_frame * frm , * frm2 ;
23982397
2399- list_for_each_entry_safe (frm , frm2 , & frms , list )
2398+ list_for_each_entry_safe (frm , frm2 , & qcc -> tx . frms , list )
24002399 qc_frm_free (qcc -> conn -> handle .qc , & frm );
24012400 }
24022401
@@ -2717,6 +2716,10 @@ static void qcc_release(struct qcc *qcc)
27172716 struct quic_frame * frm = LIST_ELEM (qcc -> lfctl .frms .n , struct quic_frame * , list );
27182717 qc_frm_free (qcc -> conn -> handle .qc , & frm );
27192718 }
2719+ while (!LIST_ISEMPTY (& qcc -> tx .frms )) {
2720+ struct quic_frame * frm = LIST_ELEM (qcc -> tx .frms .n , struct quic_frame * , list );
2721+ qc_frm_free (qcc -> conn -> handle .qc , & frm );
2722+ }
27202723
27212724 if (qcc -> app_ops && qcc -> app_ops -> release )
27222725 qcc -> app_ops -> release (qcc -> ctx );
@@ -2831,6 +2834,7 @@ static void _qcc_init(struct qcc *qcc)
28312834 qcc -> app_ops = NULL ;
28322835 qcc -> streams_by_id = EB_ROOT_UNIQUE ;
28332836 LIST_INIT (& qcc -> lfctl .frms );
2837+ LIST_INIT (& qcc -> tx .frms );
28342838}
28352839
28362840static int qmux_init (struct connection * conn , struct proxy * prx ,
0 commit comments