Merge "NetworkPolicyManagerService: fix deadlock" into oc-dev
am: 73edcd7328
Change-Id: I8428663ed86cc4257b24ad10488d69b89666537d
This commit is contained in:
@@ -1003,13 +1003,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
final boolean meteredHint = info.getMeteredHint();
|
final boolean meteredHint = info.getMeteredHint();
|
||||||
|
|
||||||
final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(info.getSSID());
|
final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(info.getSSID());
|
||||||
|
synchronized (mUidRulesFirstLock) {
|
||||||
synchronized (mNetworkPoliciesSecondLock) {
|
synchronized (mNetworkPoliciesSecondLock) {
|
||||||
NetworkPolicy policy = mNetworkPolicy.get(template);
|
NetworkPolicy policy = mNetworkPolicy.get(template);
|
||||||
if (policy == null && meteredHint) {
|
if (policy == null && meteredHint) {
|
||||||
// policy doesn't exist, and AP is hinting that it's
|
// policy doesn't exist, and AP is hinting that it's
|
||||||
// metered: create an inferred policy.
|
// metered: create an inferred policy.
|
||||||
policy = newWifiPolicy(template, meteredHint);
|
policy = newWifiPolicy(template, meteredHint);
|
||||||
addNetworkPolicyNL(policy);
|
addNetworkPolicyAL(policy);
|
||||||
|
|
||||||
} else if (policy != null && policy.inferred) {
|
} else if (policy != null && policy.inferred) {
|
||||||
// policy exists, and was inferred: update its current
|
// policy exists, and was inferred: update its current
|
||||||
@@ -1022,6 +1023,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static NetworkPolicy newWifiPolicy(NetworkTemplate template, boolean metered) {
|
static NetworkPolicy newWifiPolicy(NetworkTemplate template, boolean metered) {
|
||||||
@@ -1289,14 +1291,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
// permission above.
|
// permission above.
|
||||||
|
|
||||||
maybeRefreshTrustedTime();
|
maybeRefreshTrustedTime();
|
||||||
|
synchronized (mUidRulesFirstLock) {
|
||||||
synchronized (mNetworkPoliciesSecondLock) {
|
synchronized (mNetworkPoliciesSecondLock) {
|
||||||
ensureActiveMobilePolicyNL();
|
ensureActiveMobilePolicyAL();
|
||||||
normalizePoliciesNL();
|
normalizePoliciesNL();
|
||||||
updateNetworkEnabledNL();
|
updateNetworkEnabledNL();
|
||||||
updateNetworkRulesNL();
|
updateNetworkRulesNL();
|
||||||
updateNotificationsNL();
|
updateNotificationsNL();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1477,7 +1481,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
maybeRefreshTrustedTime();
|
maybeRefreshTrustedTime();
|
||||||
synchronized (mUidRulesFirstLock) {
|
synchronized (mUidRulesFirstLock) {
|
||||||
synchronized (mNetworkPoliciesSecondLock) {
|
synchronized (mNetworkPoliciesSecondLock) {
|
||||||
final boolean added = ensureActiveMobilePolicyNL(subId, subscriberId);
|
final boolean added = ensureActiveMobilePolicyAL(subId, subscriberId);
|
||||||
if (added) return;
|
if (added) return;
|
||||||
final boolean updated = maybeUpdateMobilePolicyCycleNL(subId);
|
final boolean updated = maybeUpdateMobilePolicyCycleNL(subId);
|
||||||
if (!updated) return;
|
if (!updated) return;
|
||||||
@@ -1721,8 +1725,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
* Once any {@link #mNetworkPolicy} are loaded from disk, ensure that we
|
* Once any {@link #mNetworkPolicy} are loaded from disk, ensure that we
|
||||||
* have at least a default mobile policy defined.
|
* have at least a default mobile policy defined.
|
||||||
*/
|
*/
|
||||||
private void ensureActiveMobilePolicyNL() {
|
private void ensureActiveMobilePolicyAL() {
|
||||||
if (LOGV) Slog.v(TAG, "ensureActiveMobilePolicyNL()");
|
if (LOGV) Slog.v(TAG, "ensureActiveMobilePolicyAL()");
|
||||||
if (mSuppressDefaultPolicy) return;
|
if (mSuppressDefaultPolicy) return;
|
||||||
|
|
||||||
final TelephonyManager tele = TelephonyManager.from(mContext);
|
final TelephonyManager tele = TelephonyManager.from(mContext);
|
||||||
@@ -1731,7 +1735,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
final int[] subIds = sub.getActiveSubscriptionIdList();
|
final int[] subIds = sub.getActiveSubscriptionIdList();
|
||||||
for (int subId : subIds) {
|
for (int subId : subIds) {
|
||||||
final String subscriberId = tele.getSubscriberId(subId);
|
final String subscriberId = tele.getSubscriberId(subId);
|
||||||
ensureActiveMobilePolicyNL(subId, subscriberId);
|
ensureActiveMobilePolicyAL(subId, subscriberId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1743,7 +1747,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
* @param subscriberId that we check for an existing policy
|
* @param subscriberId that we check for an existing policy
|
||||||
* @return true if a mobile network policy was added, or false one already existed.
|
* @return true if a mobile network policy was added, or false one already existed.
|
||||||
*/
|
*/
|
||||||
private boolean ensureActiveMobilePolicyNL(int subId, String subscriberId) {
|
private boolean ensureActiveMobilePolicyAL(int subId, String subscriberId) {
|
||||||
// Poke around to see if we already have a policy
|
// Poke around to see if we already have a policy
|
||||||
final NetworkIdentity probeIdent = new NetworkIdentity(TYPE_MOBILE,
|
final NetworkIdentity probeIdent = new NetworkIdentity(TYPE_MOBILE,
|
||||||
TelephonyManager.NETWORK_TYPE_UNKNOWN, subscriberId, null, false, true);
|
TelephonyManager.NETWORK_TYPE_UNKNOWN, subscriberId, null, false, true);
|
||||||
@@ -1761,7 +1765,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
Slog.i(TAG, "No policy for subscriber " + NetworkIdentity.scrubSubscriberId(subscriberId)
|
Slog.i(TAG, "No policy for subscriber " + NetworkIdentity.scrubSubscriberId(subscriberId)
|
||||||
+ "; generating default policy");
|
+ "; generating default policy");
|
||||||
final NetworkPolicy policy = buildDefaultMobilePolicy(subId, subscriberId);
|
final NetworkPolicy policy = buildDefaultMobilePolicy(subId, subscriberId);
|
||||||
addNetworkPolicyNL(policy);
|
addNetworkPolicyAL(policy);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2265,7 +2269,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addNetworkPolicyNL(NetworkPolicy policy) {
|
void addNetworkPolicyAL(NetworkPolicy policy) {
|
||||||
NetworkPolicy[] policies = getNetworkPolicies(mContext.getOpPackageName());
|
NetworkPolicy[] policies = getNetworkPolicies(mContext.getOpPackageName());
|
||||||
policies = ArrayUtils.appendElement(NetworkPolicy.class, policies, policy);
|
policies = ArrayUtils.appendElement(NetworkPolicy.class, policies, policy);
|
||||||
setNetworkPolicies(policies);
|
setNetworkPolicies(policies);
|
||||||
|
|||||||
Reference in New Issue
Block a user