summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 20:34:07 +0000
committerrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-07 20:34:07 +0000
commit63b866ebe66141ccf3493aae6c5fe58a1517e207 (patch)
tree48a2bdb8495c67cedd00336057ad06c6ffc667b3 /net
parentcfd837c4da9166959475f9f309ab5f5253c76560 (diff)
downloadchromium_src-63b866ebe66141ccf3493aae6c5fe58a1517e207.zip
chromium_src-63b866ebe66141ccf3493aae6c5fe58a1517e207.tar.gz
chromium_src-63b866ebe66141ccf3493aae6c5fe58a1517e207.tar.bz2
More attempts to fix the crash in QuicConnection::CanWrite.
BUG=354669 Review URL: https://codereview.chromium.org/227233009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262195 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/quic/quic_client_session.cc6
-rw-r--r--net/quic/quic_session.cc6
2 files changed, 11 insertions, 1 deletions
diff --git a/net/quic/quic_client_session.cc b/net/quic/quic_client_session.cc
index 5fe6e10..b00aa79 100644
--- a/net/quic/quic_client_session.cc
+++ b/net/quic/quic_client_session.cc
@@ -179,6 +179,12 @@ QuicClientSession::~QuicClientSession() {
}
}
+ if (connection()->connected()) {
+ // Ensure that the connection is closed by the time the session is
+ // destroyed.
+ connection()->CloseConnection(QUIC_INTERNAL_ERROR, false);
+ }
+
if (IsEncryptionEstablished())
RecordHandshakeState(STATE_ENCRYPTION_ESTABLISHED);
if (IsCryptoHandshakeConfirmed())
diff --git a/net/quic/quic_session.cc b/net/quic/quic_session.cc
index 3a3207e..900c705 100644
--- a/net/quic/quic_session.cc
+++ b/net/quic/quic_session.cc
@@ -317,7 +317,11 @@ size_t QuicSession::WriteHeaders(
void QuicSession::SendRstStream(QuicStreamId id,
QuicRstStreamErrorCode error,
QuicStreamOffset bytes_written) {
- connection_->SendRstStream(id, error, bytes_written);
+ if (connection()->connected()) {
+ // Don't bother sending a RST_STREAM frame if the connection is already
+ // closed.
+ connection_->SendRstStream(id, error, bytes_written);
+ }
CloseStreamInner(id, true);
}