From ae248075905c29a43320542d458f49515bb7f741 Mon Sep 17 00:00:00 2001 From: Yury Yarashevich Date: Mon, 3 Feb 2025 12:01:36 +0100 Subject: [PATCH] [ObjC] Avoid usage of variable after move in RTCNetworkMonitor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allocate std::map in-place and capture pointer to it by Obj-C lambda. Bug: None Change-Id: I285d8b2d10fef9130a5d0e457ad3982ff8a1f00f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/375920 Commit-Queue: Yury Yarashevich Reviewed-by: Kári Helgason Cr-Commit-Position: refs/heads/main@{#43840} --- .../components/network/RTCNetworkMonitor.mm | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/sdk/objc/components/network/RTCNetworkMonitor.mm b/sdk/objc/components/network/RTCNetworkMonitor.mm index 9f635a35d9..758e2473ed 100644 --- a/sdk/objc/components/network/RTCNetworkMonitor.mm +++ b/sdk/objc/components/network/RTCNetworkMonitor.mm @@ -82,30 +82,24 @@ rtc::AdapterType AdapterTypeFromInterfaceType( } else if (status == nw_path_status_satisfiable) { RTCLog(@"NW path monitor status: satisfiable."); } - std::map *map = - new std:: - map(); - nw_path_enumerate_interfaces( - path, - (nw_path_enumerate_interfaces_block_t) ^ - (nw_interface_t interface) { - const char *name = nw_interface_get_name(interface); - nw_interface_type_t interfaceType = - nw_interface_get_type(interface); - RTCLog(@"NW path monitor available interface: %s", name); - rtc::AdapterType adapterType = - AdapterTypeFromInterfaceType(interfaceType); - map->insert(std::pair( - name, adapterType)); - return true; - }); + std::map + owned_map; + auto map = &owned_map; // Capture raw pointer for Objective-C block + nw_path_enumerate_interfaces(path, ^(nw_interface_t interface) { + const char *name = nw_interface_get_name(interface); + nw_interface_type_t interfaceType = nw_interface_get_type(interface); + RTCLog(@"NW path monitor available interface: %s", name); + rtc::AdapterType adapterType = + AdapterTypeFromInterfaceType(interfaceType); + map->emplace(name, adapterType); + return true; + }); @synchronized(strongSelf) { webrtc::NetworkMonitorObserver *observer = strongSelf->_observer; if (observer) { - observer->OnPathUpdate(std::move(*map)); + observer->OnPathUpdate(std::move(owned_map)); } } - delete map; }); nw_path_monitor_set_queue( _pathMonitor,