Merge "Fix race condition when TelephonyRegistry handles multi-SIM config change" into tm-dev am: 0817165aca am: 3aeca773cf
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18086357 Change-Id: I551e6d1b286a4273b38c71b6797bb77afb1b4782 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -2803,6 +2803,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
|||||||
+ " callback.asBinder=" + callback.asBinder());
|
+ " callback.asBinder=" + callback.asBinder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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) {
|
||||||
if (!validatePhoneId(phoneId)) {
|
if (!validatePhoneId(phoneId)) {
|
||||||
throw new IllegalArgumentException("Invalid slot index: " + phoneId);
|
throw new IllegalArgumentException("Invalid slot index: " + phoneId);
|
||||||
@@ -2865,6 +2870,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) {
|
||||||
if (!validatePhoneId(phoneId)) {
|
if (!validatePhoneId(phoneId)) {
|
||||||
throw new IllegalArgumentException("Invalid slot index: " + phoneId);
|
throw new IllegalArgumentException("Invalid slot index: " + phoneId);
|
||||||
@@ -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));
|
||||||
@@ -3365,7 +3381,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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user