OSDN Git Service

Fix potential race in Theme creation
authorAdam Lesinski <adamlesinski@google.com>
Mon, 12 Jun 2017 19:22:10 +0000 (12:22 -0700)
committerAdam Lesinski <adamlesinski@google.com>
Mon, 19 Jun 2017 22:29:46 +0000 (22:29 +0000)
Bug: 38190555
Test: none
Change-Id: Id627bd6088dc469baffb1abb8310cd9e992996aa

core/java/android/app/ContextImpl.java

index 268a105..1b25e65 100644 (file)
@@ -256,28 +256,34 @@ class ContextImpl extends Context {
 
     @Override
     public void setTheme(int resId) {
-        if (mThemeResource != resId) {
-            mThemeResource = resId;
-            initializeTheme();
+        synchronized (mSync) {
+            if (mThemeResource != resId) {
+                mThemeResource = resId;
+                initializeTheme();
+            }
         }
     }
 
     @Override
     public int getThemeResId() {
-        return mThemeResource;
+        synchronized (mSync) {
+            return mThemeResource;
+        }
     }
 
     @Override
     public Resources.Theme getTheme() {
-        if (mTheme != null) {
-            return mTheme;
-        }
+        synchronized (mSync) {
+            if (mTheme != null) {
+                return mTheme;
+            }
 
-        mThemeResource = Resources.selectDefaultTheme(mThemeResource,
-                getOuterContext().getApplicationInfo().targetSdkVersion);
-        initializeTheme();
+            mThemeResource = Resources.selectDefaultTheme(mThemeResource,
+                    getOuterContext().getApplicationInfo().targetSdkVersion);
+            initializeTheme();
 
-        return mTheme;
+            return mTheme;
+        }
     }
 
     private void initializeTheme() {