| Index: webrtc/p2p/base/port.cc | 
| diff --git a/webrtc/p2p/base/port.cc b/webrtc/p2p/base/port.cc | 
| index a5c7770f553d78314df54ebe9c27d0e877762953..ce2855106caa8c9384271f3b1687c343061a5ce9 100644 | 
| --- a/webrtc/p2p/base/port.cc | 
| +++ b/webrtc/p2p/base/port.cc | 
| @@ -566,7 +566,7 @@ void Port::SendBindingResponse(StunMessage* request, | 
| response.AddFingerprint(); | 
|  | 
| // The fact that we received a successful request means that this connection | 
| -  // (if one exists) should now be readable. | 
| +  // (if one exists) should now be receiving. | 
| Connection* conn = GetConnection(addr); | 
|  | 
| // Send the response message. | 
| @@ -630,8 +630,10 @@ void Port::SendBindingErrorResponse(StunMessage* request, | 
| } | 
|  | 
| void Port::OnMessage(rtc::Message *pmsg) { | 
| -  ASSERT(pmsg->message_id == MSG_CHECKTIMEOUT); | 
| -  CheckTimeout(); | 
| +  ASSERT(pmsg->message_id == MSG_DEAD); | 
| +  if (dead()) { | 
| +    Destroy(); | 
| +  } | 
| } | 
|  | 
| std::string Port::ToString() const { | 
| @@ -652,12 +654,13 @@ void Port::OnConnectionDestroyed(Connection* conn) { | 
| ASSERT(iter != connections_.end()); | 
| connections_.erase(iter); | 
|  | 
| -  // On the controlled side, ports time out, but only after all connections | 
| -  // fail.  Note: If a new connection is added after this message is posted, | 
| -  // but it fails and is removed before kPortTimeoutDelay, then this message | 
| -  //  will still cause the Port to be destroyed. | 
| -  if (ice_role_ == ICEROLE_CONTROLLED) | 
| -    thread_->PostDelayed(timeout_delay_, this, MSG_CHECKTIMEOUT); | 
| +  // On the controlled side, ports time out after all connections fail. | 
| +  // Note: If a new connection is added after this message is posted, but it | 
| +  // fails and is removed before kPortTimeoutDelay, then this message will | 
| +  // still cause the Port to be destroyed. | 
| +  if (dead()) { | 
| +    thread_->PostDelayed(timeout_delay_, this, MSG_DEAD); | 
| +  } | 
| } | 
|  | 
| void Port::Destroy() { | 
| @@ -667,16 +670,6 @@ void Port::Destroy() { | 
| delete this; | 
| } | 
|  | 
| -void Port::CheckTimeout() { | 
| -  ASSERT(ice_role_ == ICEROLE_CONTROLLED); | 
| -  // If this port has no connections, then there's no reason to keep it around. | 
| -  // When the connections time out (both read and write), they will delete | 
| -  // themselves, so if we have any connections, they are either readable or | 
| -  // writable (or still connecting). | 
| -  if (connections_.empty()) | 
| -    Destroy(); | 
| -} | 
| - | 
| const std::string Port::username_fragment() const { | 
| return ice_username_fragment_; | 
| } | 
| @@ -918,7 +911,7 @@ void Connection::OnReadPacket( | 
| } else { | 
| // The packet is STUN and passed the Port checks. | 
| // Perform our own checks to ensure this packet is valid. | 
| -    // If this is a STUN request, then update the readable bit and respond. | 
| +    // If this is a STUN request, then update the receiving bit and respond. | 
| // If this is a STUN response, then update the writable bit. | 
| // Log at LS_INFO if we receive a ping on an unwritable connection. | 
| rtc::LoggingSeverity sev = (!writable() ? rtc::LS_INFO : rtc::LS_VERBOSE); | 
| @@ -936,7 +929,7 @@ void Connection::OnReadPacket( | 
| } | 
|  | 
| // Incoming, validated stun request from remote peer. | 
| -          // This call will also set the connection readable. | 
| +          // This call will also set the connection receiving. | 
| port_->SendBindingResponse(msg.get(), addr); | 
|  | 
| // If timed out sending writability checks, start up again | 
| @@ -976,10 +969,9 @@ void Connection::OnReadPacket( | 
| // Otherwise silently discard the response message. | 
| break; | 
|  | 
| -      // Remote end point sent an STUN indication instead of regular | 
| -      // binding request. In this case |last_ping_received_| will be updated. | 
| -      // Otherwise we can mark connection to read timeout. No response will be | 
| -      // sent in this scenario. | 
| +      // Remote end point sent an STUN indication instead of regular binding | 
| +      // request. In this case |last_ping_received_| will be updated but no | 
| +      // response will be sent. | 
| case STUN_BINDING_INDICATION: | 
| ReceivedPing(); | 
| break; | 
| @@ -1302,7 +1294,7 @@ void Connection::MaybeUpdatePeerReflexiveCandidate( | 
|  | 
| void Connection::OnMessage(rtc::Message *pmsg) { | 
| ASSERT(pmsg->message_id == MSG_DELETE); | 
| -  LOG_J(LS_INFO, this) << "Connection deleted due to read or write timeout"; | 
| +  LOG_J(LS_INFO, this) << "Connection deleted"; | 
| SignalDestroyed(this); | 
| delete this; | 
| } | 
|  |