From 989b766c0d15d9e7f4e619f855417c787d866eef Mon Sep 17 00:00:00 2001 From: Marten Richter Date: Sat, 14 Sep 2024 13:44:52 +0200 Subject: [PATCH] Handle zombie streams, when sending rst If QuicSession::OnStreamClosed is called on a stream with a pending outgoing fin, a zombie stream will be created. A call to QuicStream::OnStopSending afterward, which in turn calls QuicStream::MaybeSendRstStream should kill the zombie finally. But this route misses a call to session's session_->MaybeCloseZombieStream, so the stream is not removed from active streams. This triggers a quic_bug_12435_2 when OnConnectionClosed is finally called on session close. This commit adds the missing call to the MaybeCloseZombieStream. --- quiche/quic/core/quic_stream.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/quiche/quic/core/quic_stream.cc b/quiche/quic/core/quic_stream.cc index e927ee292..5e91a6307 100644 --- a/quiche/quic/core/quic_stream.cc +++ b/quiche/quic/core/quic_stream.cc @@ -891,6 +891,9 @@ void QuicStream::MaybeSendRstStream(QuicResetStreamError error) { session()->MaybeSendRstStreamFrame(id(), error, stream_bytes_written()); rst_sent_ = true; CloseWriteSide(); + if (read_side_closed_ && write_side_closed_ && !IsWaitingForAcks()) { + session_->MaybeCloseZombieStream(id_); + } } bool QuicStream::HasBufferedData() const {