Index: net/quic/quic_connection.cc |
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc |
index d4f1593616651437b1ad11ee4463f3df80c32f70..9228b91091071702c7287cca330ff7d654666069 100644 |
--- a/net/quic/quic_connection.cc |
+++ b/net/quic/quic_connection.cc |
@@ -235,7 +235,8 @@ QuicConnection::QuicConnection(QuicConnectionId connection_id, |
peer_ip_changed_(false), |
peer_port_changed_(false), |
self_ip_changed_(false), |
- self_port_changed_(false) { |
+ self_port_changed_(false), |
+ weak_factory_(this) { |
if (!is_server_) { |
// Pacing will be enabled if the client negotiates it. |
sent_packet_manager_.MaybeEnablePacing(); |
@@ -970,8 +971,11 @@ void QuicConnection::SendVersionNegotiationPacket() { |
packet_generator_.SerializeVersionNegotiationPacket( |
framer_.supported_versions())); |
WriteResult result = writer_->WritePacket( |
- version_packet->data(), version_packet->length(), |
- self_address().address(), peer_address()); |
+ version_packet->data(), |
+ version_packet->length(), |
+ self_address().address(), |
+ peer_address(), |
+ base::Callback<void(WriteResult wr)>()); |
if (result.status == WRITE_STATUS_ERROR) { |
// We can't send an error as the socket is presumably borked. |
@@ -1390,10 +1394,13 @@ bool QuicConnection::WritePacket(QueuedPacket packet) { |
DCHECK(pending_write_.get() == NULL); |
pending_write_.reset(new QueuedPacket(packet)); |
- WriteResult result = writer_->WritePacket(encrypted->data(), |
- encrypted->length(), |
- self_address().address(), |
- peer_address()); |
+ WriteResult result = writer_->WritePacket( |
+ encrypted->data(), |
+ encrypted->length(), |
+ self_address().address(), |
+ peer_address(), |
+ base::Bind(base::IgnoreResult(&QuicConnection::OnPacketSent), |
+ weak_factory_.GetWeakPtr())); |
if (result.error_code == ERR_IO_PENDING) { |
DCHECK_EQ(WRITE_STATUS_BLOCKED, result.status); |
} |