Index: net/quic/quic_reliable_client_stream.cc |
diff --git a/net/quic/quic_reliable_client_stream.cc b/net/quic/quic_reliable_client_stream.cc |
index 09fb01ef6c9fb114b07b062ffd00091f1df7fdbe..2e66897eafce5a867f6baaf1b52f273895700e17 100644 |
--- a/net/quic/quic_reliable_client_stream.cc |
+++ b/net/quic/quic_reliable_client_stream.cc |
@@ -5,19 +5,26 @@ |
#include "net/quic/quic_reliable_client_stream.h" |
#include "net/base/net_errors.h" |
+#include "net/quic/quic_session.h" |
namespace net { |
QuicReliableClientStream::QuicReliableClientStream(QuicStreamId id, |
QuicSession* session) |
- : ReliableQuicStream(id, session) { |
+ : ReliableQuicStream(id, session), |
+ delegate_(NULL) { |
} |
QuicReliableClientStream::~QuicReliableClientStream() { |
+ if (delegate_) { |
+ delegate_->OnClose(error()); |
+ } |
} |
uint32 QuicReliableClientStream::ProcessData(const char* data, |
uint32 data_len) { |
+ // TODO(rch): buffer data if we don't have a delegate. |
+ DCHECK(delegate_); |
int rv = delegate_->OnDataReceived(data, data_len); |
if (rv != OK) { |
DLOG(ERROR) << "Delegate refused data, rv: " << rv; |
@@ -28,11 +35,15 @@ uint32 QuicReliableClientStream::ProcessData(const char* data, |
} |
void QuicReliableClientStream::TerminateFromPeer(bool half_close) { |
- delegate_->OnClose(error()); |
+ if (delegate_) { |
+ delegate_->OnClose(error()); |
+ delegate_ = NULL; |
+ } |
} |
void QuicReliableClientStream::SetDelegate( |
QuicReliableClientStream::Delegate* delegate) { |
+ DCHECK((!delegate_ && delegate) || (delegate_ && !delegate)); |
delegate_ = delegate; |
} |