Revert "Reset all maps in AndroidNetworkMonitor Start()/Stop()"

This reverts commit 02293096f9689fee3d32defa77dca227cc1eee90.

Reason for revert: mysterious crashes in android_network_monitor.cc

Original change's description:
> Reset all maps in AndroidNetworkMonitor Start()/Stop()
>
> This cl/ fixes another race condition with the recent additions
> to NetworkMonitorAutoDetect (getAllNetworksFromCache).
>
> The getAllNetworksFromCache-feature uses the by the Android team
> preferred way of enumerating networks, i.e to register network listeners.
>
> Th recent fix to add IsAdapterAvailable, https://webrtc-review.googlesource.com/c/src/+/257400
> contained a bug in that the adapter_type_by_name_ map was not
> reset either on disconnect or Start/Stop.
>
> This cl/ addresses that including unit test.
> It also de-obfuscates NetworkMonitor so that it always
> calls NotifyOfActiveNetworkList on startMonitoring even
> if list.size() == 0. This should not matter but makes
> code easier to understand.
>
> Bug: webrtc:13741
> Change-Id: I438b877eebf769a8b2e7292b697ef1c0a349b24f
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/258721
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#36530}

Bug: webrtc:13741
Change-Id: I36fbf63f658d3e8048e13959cbebfbd14df12b14
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264146
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37016}
This commit is contained in:
Jonas Oreland
2022-05-27 13:54:34 +02:00
committed by WebRTC LUCI CQ
parent 94ad387f77
commit 8cd7b0a7ba
4 changed files with 6 additions and 99 deletions

View File

@ -243,7 +243,6 @@ void AndroidNetworkMonitor::Start() {
if (started_) {
return;
}
reset();
started_ = true;
surface_cellular_types_ =
field_trials_.IsEnabled("WebRTC-SurfaceCellularTypes");
@ -266,15 +265,6 @@ void AndroidNetworkMonitor::Start() {
env, field_trials_.Lookup("WebRTC-NetworkMonitorAutoDetect")));
}
void AndroidNetworkMonitor::reset() {
RTC_DCHECK_RUN_ON(network_thread_);
network_handle_by_address_.clear();
network_info_by_handle_.clear();
adapter_type_by_name_.clear();
vpn_underlying_adapter_type_by_name_.clear();
network_preference_by_adapter_type_.clear();
}
void AndroidNetworkMonitor::Stop() {
RTC_DCHECK_RUN_ON(network_thread_);
if (!started_) {
@ -291,7 +281,8 @@ void AndroidNetworkMonitor::Stop() {
Java_NetworkMonitor_stopMonitoring(env, j_network_monitor_,
jlongFromPointer(this));
reset();
network_handle_by_address_.clear();
network_info_by_handle_.clear();
}
// The implementation is largely taken from UDPSocketPosix::BindToNetwork in
@ -426,7 +417,6 @@ void AndroidNetworkMonitor::OnNetworkConnected_n(
for (const rtc::IPAddress& address : network_info.ip_addresses) {
network_handle_by_address_[address] = network_info.handle;
}
RTC_CHECK(adapter_type_by_name_.size() == network_info_by_handle_.size());
InvokeNetworksChangedCallback();
}
@ -482,12 +472,8 @@ void AndroidNetworkMonitor::OnNetworkDisconnected_n(NetworkHandle handle) {
for (const rtc::IPAddress& address : iter->second.ip_addresses) {
network_handle_by_address_.erase(address);
}
adapter_type_by_name_.erase(iter->second.interface_name);
vpn_underlying_adapter_type_by_name_.erase(iter->second.interface_name);
network_info_by_handle_.erase(iter);
}
RTC_CHECK(adapter_type_by_name_.size() == network_info_by_handle_.size());
}
void AndroidNetworkMonitor::OnNetworkPreference_n(
@ -505,17 +491,8 @@ void AndroidNetworkMonitor::OnNetworkPreference_n(
void AndroidNetworkMonitor::SetNetworkInfos(
const std::vector<NetworkInformation>& network_infos) {
RTC_DCHECK_RUN_ON(network_thread_);
// We expect this method to be called once directly after startMonitoring.
// All the caches should be empty.
RTC_CHECK(network_handle_by_address_.empty());
RTC_CHECK(network_info_by_handle_.empty());
RTC_CHECK(adapter_type_by_name_.empty());
RTC_CHECK(vpn_underlying_adapter_type_by_name_.empty());
RTC_CHECK(network_preference_by_adapter_type_.empty());
// ...but reset just in case.
reset();
network_handle_by_address_.clear();
network_info_by_handle_.clear();
RTC_LOG(LS_INFO) << "Android network monitor found " << network_infos.size()
<< " networks";
for (const NetworkInformation& network : network_infos) {

View File

@ -29,10 +29,6 @@
#include "sdk/android/src/jni/jni_helpers.h"
namespace webrtc {
namespace test {
class AndroidNetworkMonitorTest;
} // namespace test
namespace jni {
typedef int64_t NetworkHandle;
@ -124,7 +120,6 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorInterface {
absl::string_view ifname) const;
private:
void reset();
void OnNetworkConnected_n(const NetworkInformation& network_info);
void OnNetworkDisconnected_n(NetworkHandle network_handle);
void OnNetworkPreference_n(NetworkType type,
@ -168,8 +163,6 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorInterface {
RTC_PT_GUARDED_BY(network_thread_) = nullptr;
const FieldTrialsView& field_trials_;
friend class webrtc::test::AndroidNetworkMonitorTest;
};
class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory {