diff options
author | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-05 21:04:19 +0000 |
---|---|---|
committer | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-05 21:04:19 +0000 |
commit | 31024059f0a8b7e22c298fbe6657e33342357118 (patch) | |
tree | 0ed2f90e26875a7b216b2b777be17898c59c2a35 /net/spdy/spdy_session.cc | |
parent | e20859e87ff4b3a1c31ebbc4ea4215450d3f80a8 (diff) | |
download | chromium_src-31024059f0a8b7e22c298fbe6657e33342357118.zip chromium_src-31024059f0a8b7e22c298fbe6657e33342357118.tar.gz chromium_src-31024059f0a8b7e22c298fbe6657e33342357118.tar.bz2 |
SPDY: flow-control fix: resume I/O once a WINDOW_UPDATE frame is received for a stalled stream.
BUG=none
TEST=net_unittests
Review URL: http://codereview.chromium.org/3018019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55125 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_session.cc')
-rw-r--r-- | net/spdy/spdy_session.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 3e4d049..4f6504d 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -428,14 +428,18 @@ int SpdySession::WriteStreamData(spdy::SpdyStreamId stream_id, if (len > kMaxSpdyFrameChunkSize) { len = kMaxSpdyFrameChunkSize; - flags = spdy::DATA_FLAG_NONE; + flags = static_cast<spdy::SpdyDataFlags>(flags & ~spdy::DATA_FLAG_FIN); } // Obey send window size of the stream if flow control is enabled. if (use_flow_control_) { if (stream->send_window_size() <= 0) return ERR_IO_PENDING; - len = std::min(len, stream->send_window_size()); + int new_len = std::min(len, stream->send_window_size()); + if (new_len < len) { + len = new_len; + flags = static_cast<spdy::SpdyDataFlags>(flags & ~spdy::DATA_FLAG_FIN); + } stream->DecreaseSendWindowSize(len); } |