Chromium Code Reviews| Index: webrtc/p2p/base/port.cc |
| diff --git a/webrtc/p2p/base/port.cc b/webrtc/p2p/base/port.cc |
| index b08cc4c91039f8149fac115a17e70f70236698ff..a33caac12bc9afcc802aaf4c3391f19be13ead06 100644 |
| --- a/webrtc/p2p/base/port.cc |
| +++ b/webrtc/p2p/base/port.cc |
| @@ -271,7 +271,17 @@ void Port::AddAddress(const rtc::SocketAddress& address, |
| } |
| void Port::AddConnection(Connection* conn) { |
|
pthatcher1
2016/05/27 18:42:54
If we're going to destroy existing connections whe
honghaiz3
2016/05/31 18:57:31
Done.
|
| - connections_[conn->remote_candidate().address()] = conn; |
| + auto ret = connections_.insert( |
| + std::make_pair(conn->remote_candidate().address(), conn)); |
| + // If there is a different connection on the same remote address, replace |
| + // it with the new one and destroy the old one. |
| + if (ret.second == false && ret.first->second != conn) { |
| + LOG_J(LS_WARNING, this) |
| + << "A new connection was created on an existing remote address. " |
| + << "New remote candidate: " << conn->remote_candidate().ToString(); |
| + ret.first->second->Destroy(); |
| + ret.first->second = conn; |
|
pthatcher1
2016/05/27 18:42:54
Instead of putting logic in OnConnectionDestroyed
honghaiz3
2016/05/31 18:57:31
That would also do.
But in the OnConnectionDestro
pthatcher1
2016/05/31 20:09:29
I think the check is overkill. We don't have the
honghaiz3
2016/06/01 16:37:59
Done. You are right. We only hit the replace-conne
|
| + } |
| conn->SignalDestroyed.connect(this, &Port::OnConnectionDestroyed); |
| SignalConnectionCreated(this, conn); |
| } |
| @@ -687,7 +697,12 @@ void Port::OnConnectionDestroyed(Connection* conn) { |
| AddressMap::iterator iter = |
| connections_.find(conn->remote_candidate().address()); |
| ASSERT(iter != connections_.end()); |
| + if (iter->second != conn) { |
| + // If the deleted connection is different than what we have now, ignore it. |
| + return; |
| + } |
| connections_.erase(iter); |
| + HandleConnectionDestroyed(conn); |
| // 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 |