Merge "Avoid reusing a currently active NetID." into lmp-dev

This commit is contained in:
Robert Greenwalt
2014-08-21 01:02:06 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 12 deletions

View File

@@ -756,10 +756,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return mNextNetworkRequestId++; return mNextNetworkRequestId++;
} }
private synchronized int nextNetId() { private void assignNextNetId(NetworkAgentInfo nai) {
int netId = mNextNetId; synchronized (mNetworkForNetId) {
if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID; for (int i = MIN_NET_ID; i <= MAX_NET_ID; i++) {
return netId; int netId = mNextNetId;
if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
// Make sure NetID unused. http://b/16815182
if (mNetworkForNetId.get(netId) == null) {
nai.network = new Network(netId);
mNetworkForNetId.put(netId, nai);
return;
}
}
}
throw new IllegalStateException("No free netIds");
} }
private int getConnectivityChangeDelay() { private int getConnectivityChangeDelay() {
@@ -4149,7 +4159,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
int currentScore, NetworkMisc networkMisc) { int currentScore, NetworkMisc networkMisc) {
enforceConnectivityInternalPermission(); enforceConnectivityInternalPermission();
NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), nextNetId(), NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
new NetworkInfo(networkInfo), new LinkProperties(linkProperties), new NetworkInfo(networkInfo), new LinkProperties(linkProperties),
new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler, new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler,
networkMisc); networkMisc);
@@ -4163,9 +4173,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
private void handleRegisterNetworkAgent(NetworkAgentInfo na) { private void handleRegisterNetworkAgent(NetworkAgentInfo na) {
if (VDBG) log("Got NetworkAgent Messenger"); if (VDBG) log("Got NetworkAgent Messenger");
mNetworkAgentInfos.put(na.messenger, na); mNetworkAgentInfos.put(na.messenger, na);
synchronized (mNetworkForNetId) { assignNextNetId(na);
mNetworkForNetId.put(na.network.netId, na);
}
na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger); na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger);
NetworkInfo networkInfo = na.networkInfo; NetworkInfo networkInfo = na.networkInfo;
na.networkInfo = null; na.networkInfo = null;

View File

@@ -40,7 +40,7 @@ import java.util.ArrayList;
*/ */
public class NetworkAgentInfo { public class NetworkAgentInfo {
public NetworkInfo networkInfo; public NetworkInfo networkInfo;
public final Network network; public Network network;
public LinkProperties linkProperties; public LinkProperties linkProperties;
public NetworkCapabilities networkCapabilities; public NetworkCapabilities networkCapabilities;
public int currentScore; public int currentScore;
@@ -55,12 +55,12 @@ public class NetworkAgentInfo {
public final Messenger messenger; public final Messenger messenger;
public final AsyncChannel asyncChannel; public final AsyncChannel asyncChannel;
public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, int netId, NetworkInfo info, public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, NetworkInfo info,
LinkProperties lp, NetworkCapabilities nc, int score, Context context, Handler handler, LinkProperties lp, NetworkCapabilities nc, int score, Context context, Handler handler,
NetworkMisc misc) { NetworkMisc misc) {
this.messenger = messenger; this.messenger = messenger;
asyncChannel = ac; asyncChannel = ac;
network = new Network(netId); network = null;
networkInfo = info; networkInfo = info;
linkProperties = lp; linkProperties = lp;
networkCapabilities = nc; networkCapabilities = nc;
@@ -87,6 +87,7 @@ public class NetworkAgentInfo {
public String name() { public String name() {
return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" + return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" +
networkInfo.getSubtypeName() + ") - " + network.toString() + "]"; networkInfo.getSubtypeName() + ") - " +
(network == null ? "null" : network.toString()) + "]";
} }
} }