summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jack Yu <jackyu@google.com> 2019-05-16 14:27:29 -0700
committer Jack Yu <jackyu@google.com> 2019-05-16 16:35:23 -0700
commitaa77f3a308f541ccb3589fa8c9c12b2856c05ad8 (patch)
tree00858533ed1f23ff379b1f8de80ae6e5df2b1f2c
parentfa5c6e2cc67448413fa1acadbc94ee0c818718ea (diff)
Fixed concurrent access network registration info
Fixed by adding synchronization block for every place accessing network registration info in service state. Bug: 131883293 Test: Manual Merged-In: Ic10931b7fab998bfebe09d316a2d87886222dae3 Change-Id: Ic10931b7fab998bfebe09d316a2d87886222dae3 (cherry picked from commit 4c11809764d6d5c905cf4b8d5613b66ea91d9820)
-rw-r--r--telephony/java/android/telephony/ServiceState.java215
1 files changed, 115 insertions, 100 deletions
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 0ad1abe07417..daad41f6a249 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -337,7 +337,7 @@ public class ServiceState implements Parcelable {
* Reference: 3GPP TS 36.104 5.4.3 */
private int mLteEarfcnRsrpBoost = 0;
- private List<NetworkRegistrationInfo> mNetworkRegistrationInfos = new ArrayList<>();
+ private final List<NetworkRegistrationInfo> mNetworkRegistrationInfos = new ArrayList<>();
private String mOperatorAlphaLongRaw;
private String mOperatorAlphaShortRaw;
@@ -420,8 +420,10 @@ public class ServiceState implements Parcelable {
mCellBandwidths = s.mCellBandwidths == null ? null :
Arrays.copyOf(s.mCellBandwidths, s.mCellBandwidths.length);
mLteEarfcnRsrpBoost = s.mLteEarfcnRsrpBoost;
- mNetworkRegistrationInfos = s.mNetworkRegistrationInfos == null ? null :
- s.getNetworkRegistrationInfoList();
+ synchronized (mNetworkRegistrationInfos) {
+ mNetworkRegistrationInfos.clear();
+ mNetworkRegistrationInfos.addAll(s.getNetworkRegistrationInfoList());
+ }
mNrFrequencyRange = s.mNrFrequencyRange;
mOperatorAlphaLongRaw = s.mOperatorAlphaLongRaw;
mOperatorAlphaShortRaw = s.mOperatorAlphaShortRaw;
@@ -453,8 +455,9 @@ public class ServiceState implements Parcelable {
mCdmaEriIconMode = in.readInt();
mIsEmergencyOnly = in.readInt() != 0;
mLteEarfcnRsrpBoost = in.readInt();
- mNetworkRegistrationInfos = new ArrayList<>();
- in.readList(mNetworkRegistrationInfos, NetworkRegistrationInfo.class.getClassLoader());
+ synchronized (mNetworkRegistrationInfos) {
+ in.readList(mNetworkRegistrationInfos, NetworkRegistrationInfo.class.getClassLoader());
+ }
mChannelNumber = in.readInt();
mCellBandwidths = in.createIntArray();
mNrFrequencyRange = in.readInt();
@@ -481,7 +484,9 @@ public class ServiceState implements Parcelable {
out.writeInt(mCdmaEriIconMode);
out.writeInt(mIsEmergencyOnly ? 1 : 0);
out.writeInt(mLteEarfcnRsrpBoost);
- out.writeList(mNetworkRegistrationInfos);
+ synchronized (mNetworkRegistrationInfos) {
+ out.writeList(mNetworkRegistrationInfos);
+ }
out.writeInt(mChannelNumber);
out.writeIntArray(mCellBandwidths);
out.writeInt(mNrFrequencyRange);
@@ -823,31 +828,33 @@ public class ServiceState implements Parcelable {
@Override
public int hashCode() {
- return Objects.hash(
- mVoiceRegState,
- mDataRegState,
- mChannelNumber,
- Arrays.hashCode(mCellBandwidths),
- mVoiceOperatorAlphaLong,
- mVoiceOperatorAlphaShort,
- mVoiceOperatorNumeric,
- mDataOperatorAlphaLong,
- mDataOperatorAlphaShort,
- mDataOperatorNumeric,
- mIsManualNetworkSelection,
- mCssIndicator,
- mNetworkId,
- mSystemId,
- mCdmaRoamingIndicator,
- mCdmaDefaultRoamingIndicator,
- mCdmaEriIconIndex,
- mCdmaEriIconMode,
- mIsEmergencyOnly,
- mLteEarfcnRsrpBoost,
- mNetworkRegistrationInfos,
- mNrFrequencyRange,
- mOperatorAlphaLongRaw,
- mOperatorAlphaShortRaw);
+ synchronized (mNetworkRegistrationInfos) {
+ return Objects.hash(
+ mVoiceRegState,
+ mDataRegState,
+ mChannelNumber,
+ Arrays.hashCode(mCellBandwidths),
+ mVoiceOperatorAlphaLong,
+ mVoiceOperatorAlphaShort,
+ mVoiceOperatorNumeric,
+ mDataOperatorAlphaLong,
+ mDataOperatorAlphaShort,
+ mDataOperatorNumeric,
+ mIsManualNetworkSelection,
+ mCssIndicator,
+ mNetworkId,
+ mSystemId,
+ mCdmaRoamingIndicator,
+ mCdmaDefaultRoamingIndicator,
+ mCdmaEriIconIndex,
+ mCdmaEriIconMode,
+ mIsEmergencyOnly,
+ mLteEarfcnRsrpBoost,
+ mNetworkRegistrationInfos,
+ mNrFrequencyRange,
+ mOperatorAlphaLongRaw,
+ mOperatorAlphaShortRaw);
+ }
}
@Override
@@ -855,30 +862,31 @@ public class ServiceState implements Parcelable {
if (!(o instanceof ServiceState)) return false;
ServiceState s = (ServiceState) o;
- return mVoiceRegState == s.mVoiceRegState
- && mDataRegState == s.mDataRegState
- && mIsManualNetworkSelection == s.mIsManualNetworkSelection
- && mChannelNumber == s.mChannelNumber
- && Arrays.equals(mCellBandwidths, s.mCellBandwidths)
- && equalsHandlesNulls(mVoiceOperatorAlphaLong, s.mVoiceOperatorAlphaLong)
- && equalsHandlesNulls(mVoiceOperatorAlphaShort, s.mVoiceOperatorAlphaShort)
- && equalsHandlesNulls(mVoiceOperatorNumeric, s.mVoiceOperatorNumeric)
- && equalsHandlesNulls(mDataOperatorAlphaLong, s.mDataOperatorAlphaLong)
- && equalsHandlesNulls(mDataOperatorAlphaShort, s.mDataOperatorAlphaShort)
- && equalsHandlesNulls(mDataOperatorNumeric, s.mDataOperatorNumeric)
- && equalsHandlesNulls(mCssIndicator, s.mCssIndicator)
- && equalsHandlesNulls(mNetworkId, s.mNetworkId)
- && equalsHandlesNulls(mSystemId, s.mSystemId)
- && equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator)
- && equalsHandlesNulls(mCdmaDefaultRoamingIndicator,
- s.mCdmaDefaultRoamingIndicator)
- && mIsEmergencyOnly == s.mIsEmergencyOnly
- && equalsHandlesNulls(mOperatorAlphaLongRaw, s.mOperatorAlphaLongRaw)
- && equalsHandlesNulls(mOperatorAlphaShortRaw, s.mOperatorAlphaShortRaw)
- && (mNetworkRegistrationInfos == null
- ? s.mNetworkRegistrationInfos == null : s.mNetworkRegistrationInfos != null
- && mNetworkRegistrationInfos.containsAll(s.mNetworkRegistrationInfos))
- && mNrFrequencyRange == s.mNrFrequencyRange;
+ synchronized (mNetworkRegistrationInfos) {
+ return mVoiceRegState == s.mVoiceRegState
+ && mDataRegState == s.mDataRegState
+ && mIsManualNetworkSelection == s.mIsManualNetworkSelection
+ && mChannelNumber == s.mChannelNumber
+ && Arrays.equals(mCellBandwidths, s.mCellBandwidths)
+ && equalsHandlesNulls(mVoiceOperatorAlphaLong, s.mVoiceOperatorAlphaLong)
+ && equalsHandlesNulls(mVoiceOperatorAlphaShort, s.mVoiceOperatorAlphaShort)
+ && equalsHandlesNulls(mVoiceOperatorNumeric, s.mVoiceOperatorNumeric)
+ && equalsHandlesNulls(mDataOperatorAlphaLong, s.mDataOperatorAlphaLong)
+ && equalsHandlesNulls(mDataOperatorAlphaShort, s.mDataOperatorAlphaShort)
+ && equalsHandlesNulls(mDataOperatorNumeric, s.mDataOperatorNumeric)
+ && equalsHandlesNulls(mCssIndicator, s.mCssIndicator)
+ && equalsHandlesNulls(mNetworkId, s.mNetworkId)
+ && equalsHandlesNulls(mSystemId, s.mSystemId)
+ && equalsHandlesNulls(mCdmaRoamingIndicator, s.mCdmaRoamingIndicator)
+ && equalsHandlesNulls(mCdmaDefaultRoamingIndicator,
+ s.mCdmaDefaultRoamingIndicator)
+ && mIsEmergencyOnly == s.mIsEmergencyOnly
+ && equalsHandlesNulls(mOperatorAlphaLongRaw, s.mOperatorAlphaLongRaw)
+ && equalsHandlesNulls(mOperatorAlphaShortRaw, s.mOperatorAlphaShortRaw)
+ && mNetworkRegistrationInfos.size() == s.mNetworkRegistrationInfos.size()
+ && mNetworkRegistrationInfos.containsAll(s.mNetworkRegistrationInfos)
+ && mNrFrequencyRange == s.mNrFrequencyRange;
+ }
}
/**
@@ -1005,36 +1013,38 @@ public class ServiceState implements Parcelable {
@Override
public String toString() {
- return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState)
- .append("(" + rilServiceStateToString(mVoiceRegState) + ")")
- .append(", mDataRegState=").append(mDataRegState)
- .append("(" + rilServiceStateToString(mDataRegState) + ")")
- .append(", mChannelNumber=").append(mChannelNumber)
- .append(", duplexMode()=").append(getDuplexMode())
- .append(", mCellBandwidths=").append(Arrays.toString(mCellBandwidths))
- .append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong)
- .append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort)
- .append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong)
- .append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort)
- .append(", isManualNetworkSelection=").append(mIsManualNetworkSelection)
- .append(mIsManualNetworkSelection ? "(manual)" : "(automatic)")
- .append(", getRilVoiceRadioTechnology=").append(getRilVoiceRadioTechnology())
- .append("(" + rilRadioTechnologyToString(getRilVoiceRadioTechnology()) + ")")
- .append(", getRilDataRadioTechnology=").append(getRilDataRadioTechnology())
- .append("(" + rilRadioTechnologyToString(getRilDataRadioTechnology()) + ")")
- .append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported")
- .append(", mNetworkId=").append(mNetworkId)
- .append(", mSystemId=").append(mSystemId)
- .append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator)
- .append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator)
- .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly)
- .append(", isUsingCarrierAggregation=").append(isUsingCarrierAggregation())
- .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost)
- .append(", mNetworkRegistrationInfos=").append(mNetworkRegistrationInfos)
- .append(", mNrFrequencyRange=").append(mNrFrequencyRange)
- .append(", mOperatorAlphaLongRaw=").append(mOperatorAlphaLongRaw)
- .append(", mOperatorAlphaShortRaw=").append(mOperatorAlphaShortRaw)
- .append("}").toString();
+ synchronized (mNetworkRegistrationInfos) {
+ return new StringBuilder().append("{mVoiceRegState=").append(mVoiceRegState)
+ .append("(" + rilServiceStateToString(mVoiceRegState) + ")")
+ .append(", mDataRegState=").append(mDataRegState)
+ .append("(" + rilServiceStateToString(mDataRegState) + ")")
+ .append(", mChannelNumber=").append(mChannelNumber)
+ .append(", duplexMode()=").append(getDuplexMode())
+ .append(", mCellBandwidths=").append(Arrays.toString(mCellBandwidths))
+ .append(", mVoiceOperatorAlphaLong=").append(mVoiceOperatorAlphaLong)
+ .append(", mVoiceOperatorAlphaShort=").append(mVoiceOperatorAlphaShort)
+ .append(", mDataOperatorAlphaLong=").append(mDataOperatorAlphaLong)
+ .append(", mDataOperatorAlphaShort=").append(mDataOperatorAlphaShort)
+ .append(", isManualNetworkSelection=").append(mIsManualNetworkSelection)
+ .append(mIsManualNetworkSelection ? "(manual)" : "(automatic)")
+ .append(", getRilVoiceRadioTechnology=").append(getRilVoiceRadioTechnology())
+ .append("(" + rilRadioTechnologyToString(getRilVoiceRadioTechnology()) + ")")
+ .append(", getRilDataRadioTechnology=").append(getRilDataRadioTechnology())
+ .append("(" + rilRadioTechnologyToString(getRilDataRadioTechnology()) + ")")
+ .append(", mCssIndicator=").append(mCssIndicator ? "supported" : "unsupported")
+ .append(", mNetworkId=").append(mNetworkId)
+ .append(", mSystemId=").append(mSystemId)
+ .append(", mCdmaRoamingIndicator=").append(mCdmaRoamingIndicator)
+ .append(", mCdmaDefaultRoamingIndicator=").append(mCdmaDefaultRoamingIndicator)
+ .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly)
+ .append(", isUsingCarrierAggregation=").append(isUsingCarrierAggregation())
+ .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost)
+ .append(", mNetworkRegistrationInfos=").append(mNetworkRegistrationInfos)
+ .append(", mNrFrequencyRange=").append(mNrFrequencyRange)
+ .append(", mOperatorAlphaLongRaw=").append(mOperatorAlphaLongRaw)
+ .append(", mOperatorAlphaShortRaw=").append(mOperatorAlphaShortRaw)
+ .append("}").toString();
+ }
}
private void init() {
@@ -1060,17 +1070,19 @@ public class ServiceState implements Parcelable {
mIsEmergencyOnly = false;
mLteEarfcnRsrpBoost = 0;
mNrFrequencyRange = FREQUENCY_RANGE_UNKNOWN;
- mNetworkRegistrationInfos.clear();
- addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
- .setDomain(NetworkRegistrationInfo.DOMAIN_CS)
- .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
- .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
- .build());
- addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
- .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
- .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
- .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
- .build());
+ synchronized (mNetworkRegistrationInfos) {
+ mNetworkRegistrationInfos.clear();
+ addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
+ .setDomain(NetworkRegistrationInfo.DOMAIN_CS)
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
+ .build());
+ addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder()
+ .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN)
+ .build());
+ }
mOperatorAlphaLongRaw = null;
mOperatorAlphaShortRaw = null;
}
@@ -1913,10 +1925,13 @@ public class ServiceState implements Parcelable {
*/
public ServiceState sanitizeLocationInfo(boolean removeCoarseLocation) {
ServiceState state = new ServiceState(this);
- if (state.mNetworkRegistrationInfos != null) {
- state.mNetworkRegistrationInfos = state.mNetworkRegistrationInfos.stream()
- .map(NetworkRegistrationInfo::sanitizeLocationInfo)
- .collect(Collectors.toList());
+ synchronized (state.mNetworkRegistrationInfos) {
+ List<NetworkRegistrationInfo> networkRegistrationInfos =
+ state.mNetworkRegistrationInfos.stream()
+ .map(NetworkRegistrationInfo::sanitizeLocationInfo)
+ .collect(Collectors.toList());
+ state.mNetworkRegistrationInfos.clear();
+ state.mNetworkRegistrationInfos.addAll(networkRegistrationInfos);
}
if (!removeCoarseLocation) return state;