Make AndroidNetworkMonitor::Start() create a new task safety flag
Instead of using SetAlive on the old flag (which might allow old tasks in the queue to run). Bug: webrtc:12339 Change-Id: Ia1a3eb6932f62881f013fd62b0e008d97d8713cd Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/211863 Reviewed-by: Tommi <tommi@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33475}
This commit is contained in:
@ -229,8 +229,7 @@ AndroidNetworkMonitor::AndroidNetworkMonitor(
|
|||||||
: android_sdk_int_(Java_NetworkMonitor_androidSdkInt(env)),
|
: android_sdk_int_(Java_NetworkMonitor_androidSdkInt(env)),
|
||||||
j_application_context_(env, j_application_context),
|
j_application_context_(env, j_application_context),
|
||||||
j_network_monitor_(env, Java_NetworkMonitor_getInstance(env)),
|
j_network_monitor_(env, Java_NetworkMonitor_getInstance(env)),
|
||||||
network_thread_(rtc::Thread::Current()),
|
network_thread_(rtc::Thread::Current()) {}
|
||||||
safety_flag_(PendingTaskSafetyFlag::Create()) {}
|
|
||||||
|
|
||||||
AndroidNetworkMonitor::~AndroidNetworkMonitor() {
|
AndroidNetworkMonitor::~AndroidNetworkMonitor() {
|
||||||
RTC_DCHECK(!started_);
|
RTC_DCHECK(!started_);
|
||||||
@ -250,8 +249,10 @@ void AndroidNetworkMonitor::Start() {
|
|||||||
bind_using_ifname_ =
|
bind_using_ifname_ =
|
||||||
webrtc::field_trial::IsEnabled("WebRTC-BindUsingInterfaceName");
|
webrtc::field_trial::IsEnabled("WebRTC-BindUsingInterfaceName");
|
||||||
|
|
||||||
// Needed for restart after Stop().
|
// This pointer is also accessed by the methods called from java threads.
|
||||||
safety_flag_->SetAlive();
|
// Assigning it here is safe, because the java monitor is in a stopped state,
|
||||||
|
// and will not make any callbacks.
|
||||||
|
safety_flag_ = PendingTaskSafetyFlag::Create();
|
||||||
|
|
||||||
JNIEnv* env = AttachCurrentThreadIfNeeded();
|
JNIEnv* env = AttachCurrentThreadIfNeeded();
|
||||||
Java_NetworkMonitor_startMonitoring(
|
Java_NetworkMonitor_startMonitoring(
|
||||||
|
|||||||
@ -149,8 +149,8 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorInterface {
|
|||||||
// This applies to adapter_type_by_name_, vpn_underlying_adapter_type_by_name_
|
// This applies to adapter_type_by_name_, vpn_underlying_adapter_type_by_name_
|
||||||
// and FindNetworkHandleFromIfname.
|
// and FindNetworkHandleFromIfname.
|
||||||
bool bind_using_ifname_ RTC_GUARDED_BY(network_thread_) = true;
|
bool bind_using_ifname_ RTC_GUARDED_BY(network_thread_) = true;
|
||||||
const rtc::scoped_refptr<PendingTaskSafetyFlag> safety_flag_
|
rtc::scoped_refptr<PendingTaskSafetyFlag> safety_flag_
|
||||||
RTC_PT_GUARDED_BY(network_thread_);
|
RTC_PT_GUARDED_BY(network_thread_) = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory {
|
class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory {
|
||||||
|
|||||||
Reference in New Issue
Block a user