diff options
author | erikchen@google.com <erikchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-27 20:04:03 +0000 |
---|---|---|
committer | erikchen@google.com <erikchen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-27 20:04:03 +0000 |
commit | 6c6ea177b4c8196bbf5ea214c9082e5027997a5a (patch) | |
tree | 610f59a269c5ac50a86b8f2386cd368aff8ce56c /net/spdy/spdy_session.cc | |
parent | fab8d14e7b94307a6f9965ccb59b882b9cc79ff6 (diff) | |
download | chromium_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.cc | 12 |
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; } } |