Fix candidate leak with initWithNativeCandidate.
[RTCIceCandidate initWithNativeCandidate:] does not take ownership on candidate, so it must be released by caller. Bug: None Change-Id: I516e740e81a7aec04556f5fa71cbbecf3be6deb7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/308500 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Commit-Queue: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40314}
This commit is contained in:
parent
6efbd1fdbc
commit
e5ee43787a
@ -251,10 +251,9 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
|||||||
NSMutableArray* ice_candidates =
|
NSMutableArray* ice_candidates =
|
||||||
[NSMutableArray arrayWithCapacity:candidates.size()];
|
[NSMutableArray arrayWithCapacity:candidates.size()];
|
||||||
for (const auto& candidate : candidates) {
|
for (const auto& candidate : candidates) {
|
||||||
std::unique_ptr<JsepIceCandidate> candidate_wrapper(
|
JsepIceCandidate candidate_wrapper(candidate.transport_name(), -1, candidate);
|
||||||
new JsepIceCandidate(candidate.transport_name(), -1, candidate));
|
|
||||||
RTC_OBJC_TYPE(RTCIceCandidate) *ice_candidate =
|
RTC_OBJC_TYPE(RTCIceCandidate) *ice_candidate =
|
||||||
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:candidate_wrapper.get()];
|
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:&candidate_wrapper];
|
||||||
[ice_candidates addObject:ice_candidate];
|
[ice_candidates addObject:ice_candidate];
|
||||||
}
|
}
|
||||||
RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
|
RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
|
||||||
@ -265,14 +264,14 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
|||||||
void PeerConnectionDelegateAdapter::OnIceSelectedCandidatePairChanged(
|
void PeerConnectionDelegateAdapter::OnIceSelectedCandidatePairChanged(
|
||||||
const cricket::CandidatePairChangeEvent &event) {
|
const cricket::CandidatePairChangeEvent &event) {
|
||||||
const auto &selected_pair = event.selected_candidate_pair;
|
const auto &selected_pair = event.selected_candidate_pair;
|
||||||
auto local_candidate_wrapper = std::make_unique<JsepIceCandidate>(
|
JsepIceCandidate local_candidate_wrapper(
|
||||||
selected_pair.local_candidate().transport_name(), -1, selected_pair.local_candidate());
|
selected_pair.local_candidate().transport_name(), -1, selected_pair.local_candidate());
|
||||||
RTC_OBJC_TYPE(RTCIceCandidate) *local_candidate = [[RTC_OBJC_TYPE(RTCIceCandidate) alloc]
|
RTC_OBJC_TYPE(RTCIceCandidate) *local_candidate =
|
||||||
initWithNativeCandidate:local_candidate_wrapper.release()];
|
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:&local_candidate_wrapper];
|
||||||
auto remote_candidate_wrapper = std::make_unique<JsepIceCandidate>(
|
JsepIceCandidate remote_candidate_wrapper(
|
||||||
selected_pair.remote_candidate().transport_name(), -1, selected_pair.remote_candidate());
|
selected_pair.remote_candidate().transport_name(), -1, selected_pair.remote_candidate());
|
||||||
RTC_OBJC_TYPE(RTCIceCandidate) *remote_candidate = [[RTC_OBJC_TYPE(RTCIceCandidate) alloc]
|
RTC_OBJC_TYPE(RTCIceCandidate) *remote_candidate =
|
||||||
initWithNativeCandidate:remote_candidate_wrapper.release()];
|
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:&remote_candidate_wrapper];
|
||||||
RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
|
RTC_OBJC_TYPE(RTCPeerConnection) *peer_connection = peer_connection_;
|
||||||
NSString *nsstr_reason = [NSString stringForStdString:event.reason];
|
NSString *nsstr_reason = [NSString stringForStdString:event.reason];
|
||||||
if ([peer_connection.delegate
|
if ([peer_connection.delegate
|
||||||
|
|||||||
@ -46,11 +46,12 @@
|
|||||||
std::string sdp("candidate:4025901590 1 udp 2122265343 "
|
std::string sdp("candidate:4025901590 1 udp 2122265343 "
|
||||||
"fdff:2642:12a6:fe38:c001:beda:fcf9:51aa "
|
"fdff:2642:12a6:fe38:c001:beda:fcf9:51aa "
|
||||||
"59052 typ host generation 0");
|
"59052 typ host generation 0");
|
||||||
webrtc::IceCandidateInterface *nativeCandidate =
|
std::unique_ptr<webrtc::IceCandidateInterface> nativeCandidate(
|
||||||
webrtc::CreateIceCandidate("audio", 0, sdp, nullptr);
|
webrtc::CreateIceCandidate("audio", 0, sdp, nullptr));
|
||||||
|
|
||||||
RTC_OBJC_TYPE(RTCIceCandidate) *iceCandidate =
|
RTC_OBJC_TYPE(RTCIceCandidate) *iceCandidate =
|
||||||
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:nativeCandidate];
|
[[RTC_OBJC_TYPE(RTCIceCandidate) alloc] initWithNativeCandidate:nativeCandidate.get()];
|
||||||
|
EXPECT_NE(nativeCandidate.get(), iceCandidate.nativeCandidate.get());
|
||||||
EXPECT_TRUE([@"audio" isEqualToString:iceCandidate.sdpMid]);
|
EXPECT_TRUE([@"audio" isEqualToString:iceCandidate.sdpMid]);
|
||||||
EXPECT_EQ(0, iceCandidate.sdpMLineIndex);
|
EXPECT_EQ(0, iceCandidate.sdpMLineIndex);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user