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

Commit 93d5117c authored by Malcolm Chen's avatar Malcolm Chen Committed by Michael Groover
Browse files

Remove unecessary locking to avoid dead lock.

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

Change-Id: I15def5c401811190f0f2ca8d1fa7e44d6387407e
Merged-In: I15def5c401811190f0f2ca8d1fa7e44d6387407e
parent f587f04d
Loading
Loading
Loading
Loading
+49 −46
Original line number Diff line number Diff line
@@ -700,6 +700,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.
@@ -709,7 +715,8 @@ public class SubscriptionController extends ISub.Stub {
    @UnsupportedAppUsage
    @Override
    public List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage) {
        return getSubscriptionInfoListFromCacheHelper(callingPackage, mCacheActiveSubInfoList);
        return getSubscriptionInfoListFromCacheHelper(callingPackage,
                makeCacheListCopyWithLock(mCacheActiveSubInfoList));
    }

    /**
@@ -720,13 +727,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()
@@ -741,10 +748,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) {
@@ -756,6 +759,9 @@ public class SubscriptionController extends ISub.Stub {
                }
            }
        }

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

    /**
@@ -2909,8 +2915,8 @@ public class SubscriptionController extends ISub.Stub {

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

    /**
@@ -3568,10 +3574,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());
@@ -3598,7 +3603,6 @@ public class SubscriptionController extends ISub.Stub {
        }
        return subscriptions;
    }
    }

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