Merge "Shared state modified in two threads without synchronization" am: 4ad859af44

Original change: https://android-review.googlesource.com/c/platform/packages/services/Telephony/+/1656852

Change-Id: I05474595ed98b643fa3ae89335ab3d37b4fb39ea
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 5196c59..4ff7316 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -1225,25 +1225,29 @@
             logd("Ignore invalid phoneId: " + phoneId + " for subId: " + subscriptionId);
             return;
         }
-        overrideConfig(mOverrideConfigs, phoneId, overrides);
+        // Post to run on handler thread on which all states should be confined.
+        mHandler.post(() -> {
+            overrideConfig(mOverrideConfigs, phoneId, overrides);
 
-        if (persistent) {
-            overrideConfig(mPersistentOverrideConfigs, phoneId, overrides);
+            if (persistent) {
+                overrideConfig(mPersistentOverrideConfigs, phoneId, overrides);
 
-            if (overrides != null) {
-                final CarrierIdentifier carrierId = getCarrierIdentifierForPhoneId(phoneId);
-                saveConfigToXml(mPlatformCarrierConfigPackage, OVERRIDE_PACKAGE_ADDITION, phoneId,
-                        carrierId, mPersistentOverrideConfigs[phoneId]);
-            } else {
-                final String iccid = getIccIdForPhoneId(phoneId);
-                final int cid = getSpecificCarrierIdForPhoneId(phoneId);
-                String fileName = getFilenameForConfig(mPlatformCarrierConfigPackage,
-                        OVERRIDE_PACKAGE_ADDITION, iccid, cid);
-                File fileToDelete = new File(mContext.getFilesDir(), fileName);
-                fileToDelete.delete();
+                if (overrides != null) {
+                    final CarrierIdentifier carrierId = getCarrierIdentifierForPhoneId(phoneId);
+                    saveConfigToXml(mPlatformCarrierConfigPackage, OVERRIDE_PACKAGE_ADDITION,
+                            phoneId,
+                            carrierId, mPersistentOverrideConfigs[phoneId]);
+                } else {
+                    final String iccid = getIccIdForPhoneId(phoneId);
+                    final int cid = getSpecificCarrierIdForPhoneId(phoneId);
+                    String fileName = getFilenameForConfig(mPlatformCarrierConfigPackage,
+                            OVERRIDE_PACKAGE_ADDITION, iccid, cid);
+                    File fileToDelete = new File(mContext.getFilesDir(), fileName);
+                    fileToDelete.delete();
+                }
             }
-        }
-        notifySubscriptionInfoUpdater(phoneId);
+            notifySubscriptionInfoUpdater(phoneId);
+        });
     }
 
     private void overrideConfig(@NonNull PersistableBundle[] currentOverrides, int phoneId,