diff --git a/sdk/android/api/org/webrtc/NetworkMonitor.java b/sdk/android/api/org/webrtc/NetworkMonitor.java index 0bc461df18..ca7e4d5656 100644 --- a/sdk/android/api/org/webrtc/NetworkMonitor.java +++ b/sdk/android/api/org/webrtc/NetworkMonitor.java @@ -227,10 +227,13 @@ public class NetworkMonitor { /** Alerts all observers of a connection change. */ private void notifyObserversOfConnectionTypeChange( NetworkChangeDetector.ConnectionType newConnectionType) { - List nativeObservers = getNativeNetworkObserversSync(); - for (Long nativeObserver : nativeObservers) { - nativeNotifyConnectionTypeChanged(nativeObserver); + + synchronized (nativeNetworkObservers) { + for (Long nativeObserver : nativeNetworkObservers) { + nativeNotifyConnectionTypeChanged(nativeObserver); + } } + // This avoids calling external methods while locking on an object. List javaObservers; synchronized (networkObservers) { @@ -243,25 +246,28 @@ public class NetworkMonitor { private void notifyObserversOfNetworkConnect( NetworkChangeDetector.NetworkInformation networkInfo) { - List nativeObservers = getNativeNetworkObserversSync(); - for (Long nativeObserver : nativeObservers) { - nativeNotifyOfNetworkConnect(nativeObserver, networkInfo); + synchronized (nativeNetworkObservers) { + for (Long nativeObserver : nativeNetworkObservers) { + nativeNotifyOfNetworkConnect(nativeObserver, networkInfo); + } } } private void notifyObserversOfNetworkDisconnect(long networkHandle) { - List nativeObservers = getNativeNetworkObserversSync(); - for (Long nativeObserver : nativeObservers) { - nativeNotifyOfNetworkDisconnect(nativeObserver, networkHandle); + synchronized (nativeNetworkObservers) { + for (Long nativeObserver : nativeNetworkObservers) { + nativeNotifyOfNetworkDisconnect(nativeObserver, networkHandle); + } } } private void notifyObserversOfNetworkPreference( List types, int preference) { - List nativeObservers = getNativeNetworkObserversSync(); - for (NetworkChangeDetector.ConnectionType type : types) { - for (Long nativeObserver : nativeObservers) { - nativeNotifyOfNetworkPreference(nativeObserver, type, preference); + synchronized(nativeNetworkObservers) { + for (NetworkChangeDetector.ConnectionType type : types) { + for (Long nativeObserver : nativeNetworkObservers) { + nativeNotifyOfNetworkPreference(nativeObserver, type, preference); + } } } } @@ -282,12 +288,6 @@ public class NetworkMonitor { nativeNotifyOfActiveNetworkList(nativeObserver, networkInfos); } - private List getNativeNetworkObserversSync() { - synchronized (nativeNetworkObservers) { - return new ArrayList<>(nativeNetworkObservers); - } - } - /** * Adds an observer for any connection type changes. *