summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_session.cc
diff options
context:
space:
mode:
authorerikchen@google.com <erikchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-27 20:04:03 +0000
committererikchen@google.com <erikchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-27 20:04:03 +0000
commit6c6ea177b4c8196bbf5ea214c9082e5027997a5a (patch)
tree610f59a269c5ac50a86b8f2386cd368aff8ce56c /net/spdy/spdy_session.cc
parentfab8d14e7b94307a6f9965ccb59b882b9cc79ff6 (diff)
downloadchromium_src-6c6ea177b4c8196bbf5ea214c9082e5027997a5a.zip
chromium_src-6c6ea177b4c8196bbf5ea214c9082e5027997a5a.tar.gz
chromium_src-6c6ea177b4c8196bbf5ea214c9082e5027997a5a.tar.bz2
SPDY sends RST_STREAM upon cancelling request, or bad header parse data.
Also fix tsan failure for spdy_http_stream_unittest. Attempted to commit in http://codereview.chromium.org/3014030/show, ran into different tsan failure. TEST=net_unittests, tsan on windows for SpdyHttpStreamTest. BUG=46589, 47478, 50198 Review URL: http://codereview.chromium.org/2811072 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53829 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_session.cc')
-rw-r--r--net/spdy/spdy_session.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 9ceb951..5d6fb02 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -1122,8 +1122,16 @@ void SpdySession::OnControl(const spdy::SpdyControlFrame* frame) {
uint32 type = frame->type();
if (type == spdy::SYN_STREAM || type == spdy::SYN_REPLY) {
if (!spdy_framer_.ParseHeaderBlock(frame, headers.get())) {
- LOG(WARNING) << "Could not parse Spdy Control Frame Header";
- // TODO(mbelshe): Error the session?
+ LOG(WARNING) << "Could not parse Spdy Control Frame Header.";
+ int stream_id = 0;
+ if (type == spdy::SYN_STREAM)
+ stream_id = (reinterpret_cast<const spdy::SpdySynStreamControlFrame*>
+ (frame))->stream_id();
+ if (type == spdy::SYN_REPLY)
+ stream_id = (reinterpret_cast<const spdy::SpdySynReplyControlFrame*>
+ (frame))->stream_id();
+ if(IsStreamActive(stream_id))
+ ResetStream(stream_id, spdy::PROTOCOL_ERROR);
return;
}
}