There is a race condition on reading `ObjCNetworkMonitor::_network_monitor` field. The `ObjCNetworkMonitor::OnPathUpdate()` checks its nullability on the org.webrtc.RTCDispatcherNetworkMonitor thread BEFORE the `ObjCNetworkMonitor::Start()` assigns it on the network_monitor thread. In addition, this field is neither atomic nor protected by mutex so its last assigned value is not guaranteed to be visible to another [reading] thread. Bug: webrtc:355238623 Change-Id: I1a05215111cc873b7d4931824e18f281aebfb91f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/357880 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42778}
WebRTC Obj-C SDK
This directory contains the Obj-C SDK for WebRTC. This includes wrappers for the C++ PeerConnection API and some platform specific components for iOS and macOS.
Organization
-
api/
Wrappers around classes and functions in the C++ API for creating and configuring peer connections, etc.
-
base/
This directory contains some base protocols and classes that are used by both the platform specific components and the SDK wrappers.
-
components/
These are the platform specific components. Contains components for handling audio, capturing and rendering video, encoding and decoding using the platform's hardware codec implementation and for representing video frames in the platform's native format.
-
helpers/
These files are not WebRTC specific, but are general helper classes and utilities for the Cocoa platforms.
-
native/
APIs for wrapping the platform specific components and using them with the C++ API.
-
unittests/
This directory contains the tests.