Index: net/spdy/spdy_stream.cc |
=================================================================== |
--- net/spdy/spdy_stream.cc (revision 57015) |
+++ net/spdy/spdy_stream.cc (working copy) |
@@ -29,11 +29,12 @@ |
response_status_(OK), |
cancelled_(false), |
send_bytes_(0), |
- recv_bytes_(0), |
- histograms_recorded_(false) {} |
+ recv_bytes_(0) { |
+} |
SpdyStream::~SpdyStream() { |
DLOG(INFO) << "Deleting SpdyStream for stream " << stream_id_; |
+ UpdateHistograms(); |
} |
void SpdyStream::SetDelegate(Delegate* delegate) { |
@@ -183,9 +184,12 @@ |
IOBufferWithSize* buf = new IOBufferWithSize(length); |
memcpy(buf->data(), data, length); |
pending_buffers_.push_back(buf); |
- } |
- else |
+ } else { |
pending_buffers_.push_back(NULL); |
+ metrics_.StopStream(); |
+ session_->CloseStream(stream_id_, net::OK); |
+ // Note: |this| may be deleted after calling CloseStream. |
+ } |
return; |
} |
@@ -202,9 +206,8 @@ |
// A zero-length read means that the stream is being closed. |
if (!length) { |
metrics_.StopStream(); |
- scoped_refptr<SpdyStream> self(this); |
session_->CloseStream(stream_id_, net::OK); |
- UpdateHistograms(); |
+ // Note: |this| may be deleted after calling CloseStream. |
return; |
} |
@@ -419,11 +422,6 @@ |
} |
void SpdyStream::UpdateHistograms() { |
- if (histograms_recorded_) |
- return; |
- |
- histograms_recorded_ = true; |
- |
// We need all timers to be filled in, otherwise metrics can be bogus. |
if (send_time_.is_null() || recv_first_byte_time_.is_null() || |
recv_last_byte_time_.is_null()) |