diff options
author | Remi NGUYEN VAN <reminv@google.com> | 2020-06-25 03:54:04 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-25 03:54:04 +0000 |
commit | 0d8891456fd9573f1a6be1671f839957ca01c350 (patch) | |
tree | bf0baa25564fc84346ef975795267380aaa8dc2c /src | |
parent | 87b6ac400f2ac6608001574748bdaa2796be70b3 (diff) | |
parent | 1a69a4558feb212d5893c5c53637f7b44971ba71 (diff) |
Merge "Get link state with same lock as LinkProperties" into rvc-dev am: 2ad382e0e0 am: 1a69a4558f
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/11970037
Change-Id: I4c6898acdb57a56f4b056da10446ecd49a0c79cf
Diffstat (limited to 'src')
-rw-r--r-- | src/android/net/ip/IpClientLinkObserver.java | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/src/android/net/ip/IpClientLinkObserver.java b/src/android/net/ip/IpClientLinkObserver.java index 46b3844..82f8d5d 100644 --- a/src/android/net/ip/IpClientLinkObserver.java +++ b/src/android/net/ip/IpClientLinkObserver.java @@ -155,8 +155,12 @@ public class IpClientLinkObserver implements NetworkObserver { // now empty. Note that from the moment that the interface is removed, any further // interface-specific messages (e.g., RTM_DELADDR) will not reach us, because the netd // code that parses them will not be able to resolve the ifindex to an interface name. - clearLinkProperties(); - mCallback.update(getInterfaceLinkState()); + final boolean linkState; + synchronized (this) { + clearLinkProperties(); + linkState = getInterfaceLinkStateLocked(); + } + mCallback.update(linkState); } } @@ -164,7 +168,9 @@ public class IpClientLinkObserver implements NetworkObserver { public void onInterfaceLinkStateChanged(String iface, boolean state) { if (mInterfaceName.equals(iface)) { maybeLog("interfaceLinkStateChanged", iface + (state ? " up" : " down")); - setInterfaceLinkState(state); + synchronized (this) { + setInterfaceLinkStateLocked(state); + } } } @@ -172,12 +178,14 @@ public class IpClientLinkObserver implements NetworkObserver { public void onInterfaceAddressUpdated(LinkAddress address, String iface) { if (mInterfaceName.equals(iface)) { maybeLog("addressUpdated", iface, address); - boolean changed; + final boolean changed; + final boolean linkState; synchronized (this) { changed = mLinkProperties.addLinkAddress(address); + linkState = getInterfaceLinkStateLocked(); } if (changed) { - mCallback.update(getInterfaceLinkState()); + mCallback.update(linkState); } } } @@ -186,12 +194,14 @@ public class IpClientLinkObserver implements NetworkObserver { public void onInterfaceAddressRemoved(LinkAddress address, String iface) { if (mInterfaceName.equals(iface)) { maybeLog("addressRemoved", iface, address); - boolean changed; + final boolean changed; + final boolean linkState; synchronized (this) { changed = mLinkProperties.removeLinkAddress(address); + linkState = getInterfaceLinkStateLocked(); } if (changed) { - mCallback.update(getInterfaceLinkState()); + mCallback.update(linkState); } } } @@ -200,12 +210,14 @@ public class IpClientLinkObserver implements NetworkObserver { public void onRouteUpdated(RouteInfo route) { if (mInterfaceName.equals(route.getInterface())) { maybeLog("routeUpdated", route); - boolean changed; + final boolean changed; + final boolean linkState; synchronized (this) { changed = mLinkProperties.addRoute(route); + linkState = getInterfaceLinkStateLocked(); } if (changed) { - mCallback.update(getInterfaceLinkState()); + mCallback.update(linkState); } } } @@ -214,12 +226,14 @@ public class IpClientLinkObserver implements NetworkObserver { public void onRouteRemoved(RouteInfo route) { if (mInterfaceName.equals(route.getInterface())) { maybeLog("routeRemoved", route); - boolean changed; + final boolean changed; + final boolean linkState; synchronized (this) { changed = mLinkProperties.removeRoute(route); + linkState = getInterfaceLinkStateLocked(); } if (changed) { - mCallback.update(getInterfaceLinkState()); + mCallback.update(linkState); } } } @@ -228,12 +242,14 @@ public class IpClientLinkObserver implements NetworkObserver { public void onInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) { if (mInterfaceName.equals(iface)) { maybeLog("interfaceDnsServerInfo", Arrays.toString(addresses)); - boolean changed = mDnsServerRepository.addServers(lifetime, addresses); + final boolean changed = mDnsServerRepository.addServers(lifetime, addresses); + final boolean linkState; if (changed) { synchronized (this) { mDnsServerRepository.setDnsServersOn(mLinkProperties); + linkState = getInterfaceLinkStateLocked(); } - mCallback.update(getInterfaceLinkState()); + mCallback.update(linkState); } } } @@ -258,11 +274,11 @@ public class IpClientLinkObserver implements NetworkObserver { mLinkProperties.setInterfaceName(mInterfaceName); } - private synchronized boolean getInterfaceLinkState() { + private boolean getInterfaceLinkStateLocked() { return mInterfaceLinkState; } - private synchronized void setInterfaceLinkState(boolean state) { + private void setInterfaceLinkStateLocked(boolean state) { mInterfaceLinkState = state; } @@ -378,7 +394,7 @@ public class IpClientLinkObserver implements NetworkObserver { cancelPref64Alarm(); } - mCallback.update(getInterfaceLinkState()); + mCallback.update(getInterfaceLinkStateLocked()); } private void processPref64Option(StructNdOptPref64 opt, final long now) { |