From: Hugo Landau Date: Tue, 6 Jun 2023 15:25:12 +0000 (+0100) Subject: QUIC Send Stream State: Transition to DATA_SENT X-Git-Tag: openssl-3.2.0-alpha1~427 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c88302b0120c22339a283947409b17bd349b075;p=thirdparty%2Fopenssl.git QUIC Send Stream State: Transition to DATA_SENT Reviewed-by: Tomas Mraz Reviewed-by: Matt Caswell Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/21135) --- diff --git a/ssl/quic/quic_fifd.c b/ssl/quic/quic_fifd.c index e5ebc14adc7..58f86653771 100644 --- a/ssl/quic/quic_fifd.c +++ b/ssl/quic/quic_fifd.c @@ -92,6 +92,9 @@ static void on_acked(void *arg) fifd->confirm_frame(OSSL_QUIC_FRAME_TYPE_RESET_STREAM, chunks[i].stream_id, pkt, fifd->confirm_frame_arg); + + if (ossl_quic_sstream_is_totally_acked(sstream)) + fifd->sstream_updated(chunks[i].stream_id, fifd->sstream_updated_arg); } /* GCR */ diff --git a/ssl/quic/quic_stream_map.c b/ssl/quic/quic_stream_map.c index 83ef08de640..2d1b9b580e9 100644 --- a/ssl/quic/quic_stream_map.c +++ b/ssl/quic/quic_stream_map.c @@ -295,7 +295,7 @@ static int qsm_ready_for_gc(QUIC_STREAM_MAP *qsm, QUIC_STREAM *qs) assert(!qs->deleted || !ossl_quic_stream_has_send(qs) || ossl_quic_stream_send_is_reset(qs) - || ossl_quic_sstream_get_final_size(qs->sstream, NULL)); + || ossl_quic_stream_send_get_final_size(qs, NULL)); return qs->deleted @@ -303,10 +303,8 @@ static int qsm_ready_for_gc(QUIC_STREAM_MAP *qsm, QUIC_STREAM *qs) || recv_stream_fully_drained || qs->acked_stop_sending) && (!ossl_quic_stream_has_send(qs) - || (!ossl_quic_stream_send_is_reset(qs) - && ossl_quic_sstream_is_totally_acked(qs->sstream)) - || (ossl_quic_stream_send_is_reset(qs) - && qs->send_state == QUIC_SSTREAM_STATE_RESET_RECVD)); + || qs->send_state == QUIC_SSTREAM_STATE_DATA_RECVD + || qs->send_state == QUIC_SSTREAM_STATE_RESET_RECVD); } void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s) @@ -324,6 +322,10 @@ void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s) allowed_by_stream_limit = (stream_ordinal < stream_limit); } + if (s->send_state == QUIC_SSTREAM_STATE_DATA_SENT + && ossl_quic_sstream_is_totally_acked(s->sstream)) + ossl_quic_stream_map_notify_totally_acked(qsm, s); + if (!s->ready_for_gc) { s->ready_for_gc = qsm_ready_for_gc(qsm, s); if (s->ready_for_gc)