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

Commit 69eb0eb6 authored by Malcolm Chen's avatar Malcolm Chen Committed by Amit Mahajan
Browse files

Remove unecessary locking to avoid dead lock.

Bug: 160252067
Test: manual - switch to dsds multiple times to make sure no error
happens

Change-Id: I15def5c401811190f0f2ca8d1fa7e44d6387407e
parent 29552447
Loading
Loading
Loading
Loading
+48 −47
Original line number Diff line number Diff line
@@ -899,11 +899,17 @@ public class SubscriptionController extends ISub.Stub {
        }
    }

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

    @Deprecated
    @UnsupportedAppUsage
    public List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage) {
        return getSubscriptionInfoListFromCacheHelper(callingPackage, null,
                mCacheActiveSubInfoList);
                makeCacheListCopyWithLock(mCacheActiveSubInfoList));
    }

    /**
@@ -917,7 +923,7 @@ public class SubscriptionController extends ISub.Stub {
    public List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage,
            String callingFeatureId) {
        return getSubscriptionInfoListFromCacheHelper(callingPackage, callingFeatureId,
                mCacheActiveSubInfoList);
                makeCacheListCopyWithLock(mCacheActiveSubInfoList));
    }

    /**
@@ -928,13 +934,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()
@@ -949,10 +955,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) {
@@ -964,6 +966,9 @@ public class SubscriptionController extends ISub.Stub {
                }
            }
        }

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

    @Deprecated
@@ -3235,8 +3240,8 @@ public class SubscriptionController extends ISub.Stub {
    @Override
    public List<SubscriptionInfo> getOpportunisticSubscriptions(String callingPackage,
            String callingFeatureId) {
        return getSubscriptionInfoListFromCacheHelper(
                callingPackage, callingFeatureId, mCacheOpportunisticSubInfoList);
        return getSubscriptionInfoListFromCacheHelper(callingPackage, callingFeatureId,
                makeCacheListCopyWithLock(mCacheOpportunisticSubInfoList));
    }

    /**
@@ -3929,10 +3934,8 @@ 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 && canReadPhoneNumber) {
                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());
@@ -3960,7 +3963,6 @@ public class SubscriptionController extends ISub.Stub {
        }
        return subscriptions;
    }
    }

    /**
     * Conditionally removes identifiers from the provided {@code subInfo} if the {@code
@@ -4074,13 +4076,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);