OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/linked_ptr.h" | 8 #include "base/linked_ptr.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 state_ = CLOSED; | 191 state_ = CLOSED; |
192 | 192 |
193 // Cleanup all the streams. | 193 // Cleanup all the streams. |
194 CloseAllStreams(net::ERR_ABORTED); | 194 CloseAllStreams(net::ERR_ABORTED); |
195 | 195 |
196 if (connection_->is_initialized()) { | 196 if (connection_->is_initialized()) { |
197 // With Spdy we can't recycle sockets. | 197 // With Spdy we can't recycle sockets. |
198 connection_->socket()->Disconnect(); | 198 connection_->socket()->Disconnect(); |
199 } | 199 } |
200 | 200 |
| 201 // Streams should all be gone now. |
| 202 DCHECK_EQ(0u, num_active_streams()); |
| 203 DCHECK_EQ(0u, num_unclaimed_pushed_streams()); |
| 204 |
201 RecordHistograms(); | 205 RecordHistograms(); |
202 | 206 |
203 net_log_.EndEvent(NetLog::TYPE_SPDY_SESSION, NULL); | 207 net_log_.EndEvent(NetLog::TYPE_SPDY_SESSION, NULL); |
204 } | 208 } |
205 | 209 |
206 net::Error SpdySession::InitializeWithSocket( | 210 net::Error SpdySession::InitializeWithSocket( |
207 ClientSocketHandle* connection, | 211 ClientSocketHandle* connection, |
208 bool is_secure, | 212 bool is_secure, |
209 int certificate_error_code) { | 213 int certificate_error_code) { |
210 static StatsCounter spdy_sessions("spdy.sessions"); | 214 static StatsCounter spdy_sessions("spdy.sessions"); |
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 LOG(INFO) << "Closing all SPDY Streams for " << host_port_pair().ToString(); | 778 LOG(INFO) << "Closing all SPDY Streams for " << host_port_pair().ToString(); |
775 | 779 |
776 static StatsCounter abandoned_streams("spdy.abandoned_streams"); | 780 static StatsCounter abandoned_streams("spdy.abandoned_streams"); |
777 static StatsCounter abandoned_push_streams("spdy.abandoned_push_streams"); | 781 static StatsCounter abandoned_push_streams("spdy.abandoned_push_streams"); |
778 | 782 |
779 if (!active_streams_.empty()) | 783 if (!active_streams_.empty()) |
780 abandoned_streams.Add(active_streams_.size()); | 784 abandoned_streams.Add(active_streams_.size()); |
781 if (!unclaimed_pushed_streams_.empty()) { | 785 if (!unclaimed_pushed_streams_.empty()) { |
782 streams_abandoned_count_ += unclaimed_pushed_streams_.size(); | 786 streams_abandoned_count_ += unclaimed_pushed_streams_.size(); |
783 abandoned_push_streams.Add(unclaimed_pushed_streams_.size()); | 787 abandoned_push_streams.Add(unclaimed_pushed_streams_.size()); |
| 788 unclaimed_pushed_streams_.clear(); |
784 } | 789 } |
785 | 790 |
786 for (int i = 0;i < NUM_PRIORITIES;++i) { | 791 for (int i = 0;i < NUM_PRIORITIES;++i) { |
787 while (!create_stream_queues_[i].empty()) { | 792 while (!create_stream_queues_[i].empty()) { |
788 PendingCreateStream& pending_create = create_stream_queues_[i].front(); | 793 PendingCreateStream& pending_create = create_stream_queues_[i].front(); |
789 pending_create.callback->Run(ERR_ABORTED); | 794 pending_create.callback->Run(ERR_ABORTED); |
790 create_stream_queues_[i].pop(); | 795 create_stream_queues_[i].pop(); |
791 } | 796 } |
792 } | 797 } |
793 | 798 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 | 852 |
848 void SpdySession::ActivateStream(SpdyStream* stream) { | 853 void SpdySession::ActivateStream(SpdyStream* stream) { |
849 const spdy::SpdyStreamId id = stream->stream_id(); | 854 const spdy::SpdyStreamId id = stream->stream_id(); |
850 DCHECK(!IsStreamActive(id)); | 855 DCHECK(!IsStreamActive(id)); |
851 | 856 |
852 active_streams_[id] = stream; | 857 active_streams_[id] = stream; |
853 } | 858 } |
854 | 859 |
855 void SpdySession::DeleteStream(spdy::SpdyStreamId id, int status) { | 860 void SpdySession::DeleteStream(spdy::SpdyStreamId id, int status) { |
856 DLOG(INFO) << "Removing SpdyStream " << id << " from active stream list."; | 861 DLOG(INFO) << "Removing SpdyStream " << id << " from active stream list."; |
857 // Remove the stream from unclaimed_pushed_streams_ and active_streams_. | 862 |
858 PushedStreamMap::iterator it; | 863 // For push streams, if they are being deleted normally, we leave |
859 for (it = unclaimed_pushed_streams_.begin(); | 864 // the stream in the unclaimed_pushed_streams_ list. However, if |
860 it != unclaimed_pushed_streams_.end(); ++it) { | 865 // the stream is errored out, clean it up entirely. |
861 scoped_refptr<SpdyStream> curr = it->second; | 866 if (status != OK) { |
862 if (id == curr->stream_id()) { | 867 PushedStreamMap::iterator it; |
863 unclaimed_pushed_streams_.erase(it); | 868 for (it = unclaimed_pushed_streams_.begin(); |
864 break; | 869 it != unclaimed_pushed_streams_.end(); ++it) { |
| 870 scoped_refptr<SpdyStream> curr = it->second; |
| 871 if (id == curr->stream_id()) { |
| 872 unclaimed_pushed_streams_.erase(it); |
| 873 break; |
| 874 } |
865 } | 875 } |
866 } | 876 } |
867 | 877 |
868 // The stream might have been deleted. | 878 // The stream might have been deleted. |
869 ActiveStreamMap::iterator it2 = active_streams_.find(id); | 879 ActiveStreamMap::iterator it2 = active_streams_.find(id); |
870 if (it2 == active_streams_.end()) | 880 if (it2 == active_streams_.end()) |
871 return; | 881 return; |
872 | 882 |
873 // If this is an active stream, call the callback. | 883 // If this is an active stream, call the callback. |
874 const scoped_refptr<SpdyStream> stream(it2->second); | 884 const scoped_refptr<SpdyStream> stream(it2->second); |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsRetransRate", | 1328 UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySettingsRetransRate", |
1319 setting.second, | 1329 setting.second, |
1320 1, 100, 50); | 1330 1, 100, 50); |
1321 break; | 1331 break; |
1322 } | 1332 } |
1323 } | 1333 } |
1324 } | 1334 } |
1325 } | 1335 } |
1326 | 1336 |
1327 } // namespace net | 1337 } // namespace net |
OLD | NEW |