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}
diff --git a/sdk/objc/components/network/RTCNetworkMonitor+Private.h b/sdk/objc/components/network/RTCNetworkMonitor+Private.h
index 89866ea..b5c786b 100644
--- a/sdk/objc/components/network/RTCNetworkMonitor+Private.h
+++ b/sdk/objc/components/network/RTCNetworkMonitor+Private.h
@@ -20,4 +20,7 @@
 - (instancetype)initWithObserver:(webrtc::NetworkMonitorObserver *)observer
     NS_DESIGNATED_INITIALIZER;
 
+/** Stops the receiver from posting updates to `observer`. */
+- (void)stop;
+
 @end
diff --git a/sdk/objc/components/network/RTCNetworkMonitor.mm b/sdk/objc/components/network/RTCNetworkMonitor.mm
index 8ac7d3a..7ac4946 100644
--- a/sdk/objc/components/network/RTCNetworkMonitor.mm
+++ b/sdk/objc/components/network/RTCNetworkMonitor.mm
@@ -88,7 +88,12 @@
               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 @@
   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
diff --git a/sdk/objc/native/src/objc_network_monitor.mm b/sdk/objc/native/src/objc_network_monitor.mm
index 2fc84df..14ed733 100644
--- a/sdk/objc/native/src/objc_network_monitor.mm
+++ b/sdk/objc/native/src/objc_network_monitor.mm
@@ -27,6 +27,7 @@
 }
 
 ObjCNetworkMonitor::~ObjCNetworkMonitor() {
+  [network_monitor_ stop];
   network_monitor_ = nil;
 }
 
@@ -50,6 +51,7 @@
     return;
   }
   safety_flag_->SetNotAlive();
+  [network_monitor_ stop];
   network_monitor_ = nil;
   started_ = false;
 }