summaryrefslogtreecommitdiff
path: root/src/android/net
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2020-06-25 03:42:12 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-25 03:42:12 +0000
commit1a69a4558feb212d5893c5c53637f7b44971ba71 (patch)
treea2610071edf1e9190b26daa4b0c75e693d783751 /src/android/net
parent53831f2b67188016f8b8b3f7af675130a5b08cf6 (diff)
parent2ad382e0e00a9f49dd513870c7bac0575dc6abf3 (diff)
Merge "Get link state with same lock as LinkProperties" into rvc-dev am: 2ad382e0e0
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/11970037 Change-Id: I9e05fb277cd29da60849f28f0aecf990b83d7c61
Diffstat (limited to 'src/android/net')
-rw-r--r--src/android/net/ip/IpClientLinkObserver.java48
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) {