Merge "Fix race condition when TelephonyRegistry handles multi-SIM config change"

This commit is contained in:
Rambo Wang
2022-05-27 16:22:21 +00:00
committed by Gerrit Code Review

View File

@@ -2808,6 +2808,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
throw new IllegalArgumentException("Invalid slot index: " + phoneId); throw new IllegalArgumentException("Invalid slot index: " + phoneId);
} }
// In case this is triggered from the caller who has handled multiple SIM config change
// firstly, we need to update the status (mNumPhone and mCarrierPrivilegeStates) firstly.
// This is almost a no-op if there is no multiple SIM config change in advance.
onMultiSimConfigChanged();
synchronized (mRecords) { synchronized (mRecords) {
Record r = add( Record r = add(
callback.asBinder(), Binder.getCallingUid(), Binder.getCallingPid(), false); callback.asBinder(), Binder.getCallingUid(), Binder.getCallingPid(), false);
@@ -2868,6 +2873,12 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
+ ", <packages=" + pii(privilegedPackageNames) + ", <packages=" + pii(privilegedPackageNames)
+ ", uids=" + Arrays.toString(privilegedUids) + ">"); + ", uids=" + Arrays.toString(privilegedUids) + ">");
} }
// In case this is triggered from the caller who has handled multiple SIM config change
// firstly, we need to update the status (mNumPhone and mCarrierPrivilegeStates) firstly.
// This is almost a no-op if there is no multiple SIM config change in advance.
onMultiSimConfigChanged();
synchronized (mRecords) { synchronized (mRecords) {
mCarrierPrivilegeStates.set( mCarrierPrivilegeStates.set(
phoneId, new Pair<>(privilegedPackageNames, privilegedUids)); phoneId, new Pair<>(privilegedPackageNames, privilegedUids));
@@ -2900,6 +2911,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
+ ", package=" + pii(packageName) + ", uid=" + uid); + ", package=" + pii(packageName) + ", uid=" + uid);
} }
// In case this is triggered from the caller who has handled multiple SIM config change
// firstly, we need to update the status (mNumPhone and mCarrierServiceStates) firstly.
// This is almost a no-op if there is no multiple SIM config change in advance.
onMultiSimConfigChanged();
synchronized (mRecords) { synchronized (mRecords) {
mCarrierServiceStates.set( mCarrierServiceStates.set(
phoneId, new Pair<>(packageName, uid)); phoneId, new Pair<>(packageName, uid));
@@ -3364,7 +3380,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
private boolean validatePhoneId(int phoneId) { private boolean validatePhoneId(int phoneId) {
boolean valid = (phoneId >= 0) && (phoneId < mNumPhones); // Call getActiveModemCount to get the latest value instead of depending on mNumPhone
boolean valid = (phoneId >= 0) && (phoneId < getTelephonyManager().getActiveModemCount());
if (VDBG) log("validatePhoneId: " + valid); if (VDBG) log("validatePhoneId: " + valid);
return valid; return valid;
} }