Fix race condition in RTCNetworkMonitor/objc_network_monitor.
Bug: webrtc:13146 Change-Id: I74d645df8847f1e003d1dc8b64e79c6ef9bce285 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/231138 Reviewed-by: Linus Nilsson <lnilsson@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Commit-Queue: Peter Hanspers <peterhanspers@webrtc.org> Cr-Commit-Position: refs/heads/main@{#34917}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
c4152a3bb1
commit
0bf94aaa7c
@ -20,4 +20,7 @@
|
||||
- (instancetype)initWithObserver:(webrtc::NetworkMonitorObserver *)observer
|
||||
NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
/** Stops the receiver from posting updates to `observer`. */
|
||||
- (void)stop;
|
||||
|
||||
@end
|
||||
|
@ -88,7 +88,12 @@ rtc::AdapterType AdapterTypeFromInterfaceType(nw_interface_type_t interfaceType)
|
||||
rtc::AdapterType adapterType = AdapterTypeFromInterfaceType(interfaceType);
|
||||
map->insert(std::pair<std::string, rtc::AdapterType>(name, adapterType));
|
||||
});
|
||||
strongSelf->_observer->OnPathUpdate(std::move(*map));
|
||||
@synchronized(strongSelf) {
|
||||
webrtc::NetworkMonitorObserver *observer = strongSelf->_observer;
|
||||
if (observer) {
|
||||
observer->OnPathUpdate(std::move(*map));
|
||||
}
|
||||
}
|
||||
delete map;
|
||||
});
|
||||
nw_path_monitor_set_queue(
|
||||
@ -100,10 +105,20 @@ rtc::AdapterType AdapterTypeFromInterfaceType(nw_interface_type_t interfaceType)
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
- (void)cancel {
|
||||
if (@available(iOS 12, *)) {
|
||||
nw_path_monitor_cancel(_pathMonitor);
|
||||
}
|
||||
}
|
||||
- (void)stop {
|
||||
[self cancel];
|
||||
@synchronized(self) {
|
||||
_observer = nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self cancel];
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -27,6 +27,7 @@ ObjCNetworkMonitor::ObjCNetworkMonitor() {
|
||||
}
|
||||
|
||||
ObjCNetworkMonitor::~ObjCNetworkMonitor() {
|
||||
[network_monitor_ stop];
|
||||
network_monitor_ = nil;
|
||||
}
|
||||
|
||||
@ -50,6 +51,7 @@ void ObjCNetworkMonitor::Stop() {
|
||||
return;
|
||||
}
|
||||
safety_flag_->SetNotAlive();
|
||||
[network_monitor_ stop];
|
||||
network_monitor_ = nil;
|
||||
started_ = false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user