Merge "Avoid reusing a currently active NetID." into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c2e050b138
@@ -756,10 +756,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
return mNextNetworkRequestId++;
|
return mNextNetworkRequestId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized int nextNetId() {
|
private void assignNextNetId(NetworkAgentInfo nai) {
|
||||||
|
synchronized (mNetworkForNetId) {
|
||||||
|
for (int i = MIN_NET_ID; i <= MAX_NET_ID; i++) {
|
||||||
int netId = mNextNetId;
|
int netId = mNextNetId;
|
||||||
if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
|
if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
|
||||||
return netId;
|
// 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;
|
||||||
|
|||||||
@@ -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()) + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user