Fix a crash in AllocationSequence.
Internal bug 19074679. BUG= R=juberti@webrtc.org Review URL: https://webrtc-codereview.appspot.com/38699004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@8130 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -906,6 +906,7 @@ void AllocationSequence::CreateUDPPorts() {
|
|||||||
// UDPPort.
|
// UDPPort.
|
||||||
if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) {
|
if (IsFlagSet(PORTALLOCATOR_ENABLE_SHARED_SOCKET)) {
|
||||||
udp_port_ = port;
|
udp_port_ = port;
|
||||||
|
port->SignalDestroyed.connect(this, &AllocationSequence::OnPortDestroyed);
|
||||||
|
|
||||||
// If STUN is not disabled, setting stun server address to port.
|
// If STUN is not disabled, setting stun server address to port.
|
||||||
if (!IsFlagSet(PORTALLOCATOR_DISABLE_STUN)) {
|
if (!IsFlagSet(PORTALLOCATOR_DISABLE_STUN)) {
|
||||||
@ -926,7 +927,6 @@ void AllocationSequence::CreateUDPPorts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
session_->AddAllocatedPort(port, this, true);
|
session_->AddAllocatedPort(port, this, true);
|
||||||
port->SignalDestroyed.connect(this, &AllocationSequence::OnPortDestroyed);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1123,7 +1123,13 @@ void AllocationSequence::OnPortDestroyed(PortInterface* port) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
turn_ports_.erase(std::find(turn_ports_.begin(), turn_ports_.end(), port));
|
auto it = std::find(turn_ports_.begin(), turn_ports_.end(), port);
|
||||||
|
if (it != turn_ports_.end()) {
|
||||||
|
turn_ports_.erase(it);
|
||||||
|
} else {
|
||||||
|
LOG(LS_ERROR) << "Unexpected OnPortDestroyed for nonexistent port.";
|
||||||
|
ASSERT(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PortConfiguration
|
// PortConfiguration
|
||||||
|
@ -1064,3 +1064,18 @@ TEST(HttpPortAllocatorTest, TestSessionRequestUrl) {
|
|||||||
EXPECT_EQ(kIceUfrag0, args["username"]);
|
EXPECT_EQ(kIceUfrag0, args["username"]);
|
||||||
EXPECT_EQ(kIcePwd0, args["password"]);
|
EXPECT_EQ(kIcePwd0, args["password"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests that destroying ports with non-shared sockets does not crash.
|
||||||
|
// b/19074679.
|
||||||
|
TEST_F(PortAllocatorTest, TestDestroyPortsNonSharedSockets) {
|
||||||
|
AddInterface(kClientAddr);
|
||||||
|
EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
|
||||||
|
session_->StartGettingPorts();
|
||||||
|
ASSERT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
|
||||||
|
EXPECT_EQ(4U, ports_.size());
|
||||||
|
|
||||||
|
auto it = ports_.begin();
|
||||||
|
for (; it != ports_.end(); ++it) {
|
||||||
|
(reinterpret_cast<cricket::Port*>(*it))->Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user