Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Unified Diff: net/quic/core/quic_spdy_session.cc

Issue 2414193002: QUIC - bugfix for forced head of line blocking experiment. Guarded by ENABLED --FLAGS_quic_bugfix_f… (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/quic_headers_stream_test.cc ('k') | net/tools/quic/end_to_end_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/quic_spdy_session.cc
diff --git a/net/quic/core/quic_spdy_session.cc b/net/quic/core/quic_spdy_session.cc
index 37a165cb0dc25a2697fca704455e70850f77eb85..c4b7b0ef777498651399fe4c3bd741b26dae237f 100644
--- a/net/quic/core/quic_spdy_session.cc
+++ b/net/quic/core/quic_spdy_session.cc
@@ -157,12 +157,24 @@ void QuicSpdySession::OnConfigNegotiated() {
const QuicVersion version = connection()->version();
if (version > QUIC_VERSION_35 && config()->ForceHolBlocking(perspective())) {
force_hol_blocking_ = true;
- // Autotuning makes sure that the headers stream flow control does
- // not get in the way, and normal stream and connection level flow
- // control are active anyway. This is really only for the client
- // side (and mainly there just in tests and toys), where
- // autotuning and/or large buffers are not enabled by default.
- headers_stream_->flow_controller()->set_auto_tune_receive_window(true);
+ if (!FLAGS_quic_bugfix_fhol_writev_fin_only_v2) {
+ // Autotuning makes sure that the headers stream flow control does
+ // not get in the way, and normal stream and connection level flow
+ // control are active anyway. This is really only for the client
+ // side (and mainly there just in tests and toys), where
+ // autotuning and/or large buffers are not enabled by default.
+ headers_stream_->flow_controller()->set_auto_tune_receive_window(true);
+ } else {
+ // Since all streams are tunneled through the headers stream, it
+ // is important that headers stream never flow control blocks.
+ // Otherwise, busy-loop behaviour can ensue where data streams
+ // data try repeatedly to write data not realizing that the
+ // tunnel through the headers stream is blocked.
+ headers_stream_->flow_controller()->UpdateReceiveWindowSize(
+ kStreamReceiveWindowLimit);
+ headers_stream_->flow_controller()->UpdateSendWindowOffset(
+ kStreamReceiveWindowLimit);
+ }
}
if (version > QUIC_VERSION_34) {
« no previous file with comments | « net/quic/core/quic_headers_stream_test.cc ('k') | net/tools/quic/end_to_end_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698