summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_session.cc
diff options
context:
space:
mode:
authoragayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-05 21:04:19 +0000
committeragayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-05 21:04:19 +0000
commit31024059f0a8b7e22c298fbe6657e33342357118 (patch)
tree0ed2f90e26875a7b216b2b777be17898c59c2a35 /net/spdy/spdy_session.cc
parente20859e87ff4b3a1c31ebbc4ea4215450d3f80a8 (diff)
downloadchromium_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.cc8
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);
}