Merge changes Ib048c18b,Ie7694a63

* changes:
  Add debug log for tracking NPE of mMobileIfaces
  Fix mMobileIfaces is not protected by lock
This commit is contained in:
Junyu Lai
2021-07-30 02:13:25 +00:00
committed by Gerrit Code Review

View File

@@ -289,8 +289,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private String mActiveIface;
/** Set of any ifaces associated with mobile networks since boot. */
@GuardedBy("mStatsLock")
private String[] mMobileIfaces = new String[0];
private volatile String[] mMobileIfaces = new String[0];
/** Set of all ifaces currently used by traffic that does not explicitly specify a Network. */
@GuardedBy("mStatsLock")
@@ -935,7 +934,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
@Override
public String[] getMobileIfaces() {
return mMobileIfaces;
// TODO (b/192758557): Remove debug log.
if (ArrayUtils.contains(mMobileIfaces, null)) {
throw new NullPointerException(
"null element in mMobileIfaces: " + Arrays.toString(mMobileIfaces));
}
return mMobileIfaces.clone();
}
@Override
@@ -1084,7 +1088,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
@Override
public long getIfaceStats(String iface, int type) {
public long getIfaceStats(@NonNull String iface, int type) {
Objects.requireNonNull(iface);
long nativeIfaceStats = nativeGetIfaceStat(iface, type, checkBpfStatsEnable());
if (nativeIfaceStats == -1) {
return nativeIfaceStats;
@@ -1382,7 +1387,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
}
mMobileIfaces = mobileIfaces.toArray(new String[mobileIfaces.size()]);
mMobileIfaces = mobileIfaces.toArray(new String[0]);
// TODO (b/192758557): Remove debug log.
if (ArrayUtils.contains(mMobileIfaces, null)) {
throw new NullPointerException(
"null element in mMobileIfaces: " + Arrays.toString(mMobileIfaces));
}
}
private static int getSubIdForMobile(@NonNull NetworkStateSnapshot state) {