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

Commit f60011da authored by Malcolm Chen's avatar Malcolm Chen Committed by Automerger Merge Worker
Browse files

Remove unecessary locking to avoid dead lock. am: 93d5117c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/13319433

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I498c15d8fe868e2da9b8ff3df59b4a04eca83c20
parents 46155cad 93d5117c
Loading
Loading
Loading
Loading
+49 −46
Original line number Diff line number Diff line
@@ -717,6 +717,12 @@ public class SubscriptionController extends ISub.Stub {
        }
    }

    private List<SubscriptionInfo> makeCacheListCopyWithLock(List<SubscriptionInfo> cacheSubList) {
        synchronized (mSubInfoListLock) {
            return new ArrayList<>(cacheSubList);
        }
    }

    /**
     * Get the SubInfoRecord(s) of the currently active SIM(s) - which include both local
     * and remote SIMs.
@@ -726,7 +732,8 @@ public class SubscriptionController extends ISub.Stub {
    @UnsupportedAppUsage
    @Override
    public List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage) {
        return getSubscriptionInfoListFromCacheHelper(callingPackage, mCacheActiveSubInfoList);
        return getSubscriptionInfoListFromCacheHelper(callingPackage,
                makeCacheListCopyWithLock(mCacheActiveSubInfoList));
    }

    /**
@@ -737,13 +744,13 @@ public class SubscriptionController extends ISub.Stub {
    public void refreshCachedActiveSubscriptionInfoList() {
        boolean opptSubListChanged;

        synchronized (mSubInfoListLock) {
        List<SubscriptionInfo> activeSubscriptionInfoList = getSubInfo(
                SubscriptionManager.SIM_SLOT_INDEX + ">=0 OR "
                + SubscriptionManager.SUBSCRIPTION_TYPE + "="
                + SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM,
                null);

        synchronized (mSubInfoListLock) {
            if (activeSubscriptionInfoList != null) {
                // Log when active sub info changes.
                if (mCacheActiveSubInfoList.size() != activeSubscriptionInfoList.size()
@@ -758,10 +765,6 @@ public class SubscriptionController extends ISub.Stub {
                logd("activeSubscriptionInfoList is null.");
                mCacheActiveSubInfoList.clear();
            }

            // Refresh cached opportunistic sub list and detect whether it's changed.
            refreshCachedOpportunisticSubscriptionInfoList();

            if (DBG_CACHE) {
                if (!mCacheActiveSubInfoList.isEmpty()) {
                    for (SubscriptionInfo si : mCacheActiveSubInfoList) {
@@ -773,6 +776,9 @@ public class SubscriptionController extends ISub.Stub {
                }
            }
        }

        // Refresh cached opportunistic sub list and detect whether it's changed.
        refreshCachedOpportunisticSubscriptionInfoList();
    }

    /**
@@ -2962,8 +2968,8 @@ public class SubscriptionController extends ISub.Stub {

    @Override
    public List<SubscriptionInfo> getOpportunisticSubscriptions(String callingPackage) {
        return getSubscriptionInfoListFromCacheHelper(
                callingPackage, mCacheOpportunisticSubInfoList);
        return getSubscriptionInfoListFromCacheHelper(callingPackage,
                makeCacheListCopyWithLock(mCacheOpportunisticSubInfoList));
    }

    /**
@@ -3621,10 +3627,9 @@ public class SubscriptionController extends ISub.Stub {
            // the identifier and phone number access checks are not required.
        }

        synchronized (mSubInfoListLock) {
        // If the caller can read all phone state, just return the full list.
        if (canReadIdentifiers) {
                return new ArrayList<>(cacheSubList);
            return cacheSubList;
        }
        // Filter the list to only include subscriptions which the caller can manage.
        List<SubscriptionInfo> subscriptions = new ArrayList<>(cacheSubList.size());
@@ -3651,7 +3656,6 @@ public class SubscriptionController extends ISub.Stub {
        }
        return subscriptions;
    }
    }

    /**
     * Conditionally removes identifiers from the provided {@code subInfo} if the {@code
@@ -3750,13 +3754,12 @@ public class SubscriptionController extends ISub.Stub {
    }

    private void refreshCachedOpportunisticSubscriptionInfoList() {
        synchronized (mSubInfoListLock) {
            List<SubscriptionInfo> oldOpptCachedList = mCacheOpportunisticSubInfoList;

        List<SubscriptionInfo> subList = getSubInfo(
                SubscriptionManager.IS_OPPORTUNISTIC + "=1 AND ("
                        + SubscriptionManager.SIM_SLOT_INDEX + ">=0 OR "
                        + SubscriptionManager.IS_EMBEDDED + "=1)", null);
        synchronized (mSubInfoListLock) {
            List<SubscriptionInfo> oldOpptCachedList = mCacheOpportunisticSubInfoList;

            if (subList != null) {
                subList.sort(SUBSCRIPTION_INFO_COMPARATOR);