Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73edcd73 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "NetworkPolicyManagerService: fix deadlock" into oc-dev

parents c2ec7bf9 446c9c91
Loading
Loading
Loading
Loading
+33 −29
Original line number Diff line number Diff line
@@ -1003,13 +1003,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            final boolean meteredHint = info.getMeteredHint();

            final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(info.getSSID());
            synchronized (mUidRulesFirstLock) {
                synchronized (mNetworkPoliciesSecondLock) {
                    NetworkPolicy policy = mNetworkPolicy.get(template);
                    if (policy == null && meteredHint) {
                        // policy doesn't exist, and AP is hinting that it's
                        // metered: create an inferred policy.
                        policy = newWifiPolicy(template, meteredHint);
                    addNetworkPolicyNL(policy);
                        addNetworkPolicyAL(policy);

                    } else if (policy != null && policy.inferred) {
                        // 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) {
@@ -1289,14 +1291,16 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            // permission above.

            maybeRefreshTrustedTime();
            synchronized (mUidRulesFirstLock) {
                synchronized (mNetworkPoliciesSecondLock) {
                ensureActiveMobilePolicyNL();
                    ensureActiveMobilePolicyAL();
                    normalizePoliciesNL();
                    updateNetworkEnabledNL();
                    updateNetworkRulesNL();
                    updateNotificationsNL();
                }
            }
        }
    };

    /**
@@ -1477,7 +1481,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            maybeRefreshTrustedTime();
            synchronized (mUidRulesFirstLock) {
                synchronized (mNetworkPoliciesSecondLock) {
                    final boolean added = ensureActiveMobilePolicyNL(subId, subscriberId);
                    final boolean added = ensureActiveMobilePolicyAL(subId, subscriberId);
                    if (added) return;
                    final boolean updated = maybeUpdateMobilePolicyCycleNL(subId);
                    if (!updated) return;
@@ -1721,8 +1725,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
     * Once any {@link #mNetworkPolicy} are loaded from disk, ensure that we
     * have at least a default mobile policy defined.
     */
    private void ensureActiveMobilePolicyNL() {
        if (LOGV) Slog.v(TAG, "ensureActiveMobilePolicyNL()");
    private void ensureActiveMobilePolicyAL() {
        if (LOGV) Slog.v(TAG, "ensureActiveMobilePolicyAL()");
        if (mSuppressDefaultPolicy) return;

        final TelephonyManager tele = TelephonyManager.from(mContext);
@@ -1731,7 +1735,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        final int[] subIds = sub.getActiveSubscriptionIdList();
        for (int subId : subIds) {
            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
     * @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
        final NetworkIdentity probeIdent = new NetworkIdentity(TYPE_MOBILE,
                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)
                + "; generating default policy");
        final NetworkPolicy policy = buildDefaultMobilePolicy(subId, subscriberId);
        addNetworkPolicyNL(policy);
        addNetworkPolicyAL(policy);
        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());
        policies = ArrayUtils.appendElement(NetworkPolicy.class, policies, policy);
        setNetworkPolicies(policies);