Do not return from QuicSpdyClientStream::OnBodyAvailable() if visitor is null. Fleet-wide count of quic_spdy_client_stream_visitor_null_on_body_available is zero, implying that it is safe to skip this return. It is a leftover of previously removed server push implementation. Protected by FLAGS_quic_reloadable_flag_quic_skip_return_on_null_visitor. PiperOrigin-RevId: 582332350
diff --git a/quiche/quic/core/http/quic_spdy_client_stream.cc b/quiche/quic/core/http/quic_spdy_client_stream.cc index 438639b..816f21c 100644 --- a/quiche/quic/core/http/quic_spdy_client_stream.cc +++ b/quiche/quic/core/http/quic_spdy_client_stream.cc
@@ -12,6 +12,7 @@ #include "quiche/quic/core/http/spdy_utils.h" #include "quiche/quic/core/http/web_transport_http3.h" #include "quiche/quic/core/quic_alarm.h" +#include "quiche/quic/platform/api/quic_flags.h" #include "quiche/quic/platform/api/quic_logging.h" #include "quiche/common/platform/api/quiche_flag_utils.h" #include "quiche/common/quiche_text_utils.h" @@ -129,10 +130,16 @@ } void QuicSpdyClientStream::OnBodyAvailable() { + const bool skip_return_on_null_visitor = + GetQuicReloadableFlag(quic_skip_return_on_null_visitor); + if (skip_return_on_null_visitor) { + QUICHE_RELOADABLE_FLAG_COUNT(quic_skip_return_on_null_visitor); + } if (visitor() == nullptr) { - // TODO(b/171463363): Remove this early return if safe. QUICHE_CODE_COUNT(quic_spdy_client_stream_visitor_null_on_body_available); - return; + if (!skip_return_on_null_visitor) { + return; + } } while (HasBytesToRead()) {
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h index 6e5ed09..a7265cd 100644 --- a/quiche/quic/core/quic_flags_list.h +++ b/quiche/quic/core/quic_flags_list.h
@@ -69,6 +69,8 @@ QUIC_FLAG(quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true) // If true, dispatcher sends error code QUIC_HANDSHAKE_FAILED_PACKETS_BUFFERED_TOO_LONG when handshake fails due to packets buffered for too long. QUIC_FLAG(quic_reloadable_flag_quic_new_error_code_when_packets_buffered_too_long, true) +// If true, do not return from QuicSpdyClientStream::OnBodyAvailable() if visitor is nullptr. +QUIC_FLAG(quic_reloadable_flag_quic_skip_return_on_null_visitor, true) // If true, do not send MAX_STREAM frames if there are already 2 outstanding. QUIC_FLAG(quic_reloadable_flag_quic_limit_sending_max_streams2, false) // If true, enable server retransmittable on wire PING.