Fix #2262593: 42 ANR reports from android.process.acore

There was a lock in AssetManager that purported to be per-instance (mSync)
but was actually static.  A lot of code used it like it was per-instance,
but this would actually block all instances.  This is now changed to fix
the name and make everything except the actual static data lock on the
specific AssetManager instance.

Change-Id: Ie8e9ad60f962184e76b2301f7a2790d0c2487063
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index 0d43b2a..5894c4f 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -59,11 +59,12 @@
     private static final String TAG = "AssetManager";
     private static final boolean localLOGV = Config.LOGV || false;
     
-    private static final Object mSync = new Object();
-    private static final TypedValue mValue = new TypedValue();
-    private static final long[] mOffsets = new long[2];
-    private static AssetManager mSystem = null;
+    private static final Object sSync = new Object();
+    private static AssetManager sSystem = null;
 
+    private final TypedValue mValue = new TypedValue();
+    private final long[] mOffsets = new long[2];
+    
     // For communication with native code.
     private int mObject;
 
@@ -71,9 +72,7 @@
     
     private int mNumRefs = 1;
     private boolean mOpen = true;
-    private String mAssetDir;
-    private String mAppName;
-
+ 
     /**
      * Create a new AssetManager containing only the basic system assets.
      * Applications will not generally use this method, instead retrieving the
@@ -82,7 +81,7 @@
      * {@hide}
      */
     public AssetManager() {
-        synchronized (mSync) {
+        synchronized (this) {
             init();
             if (localLOGV) Log.v(TAG, "New asset manager: " + this);
             ensureSystemAssets();
@@ -90,11 +89,11 @@
     }
 
     private static void ensureSystemAssets() {
-        synchronized (mSync) {
-            if (mSystem == null) {
+        synchronized (sSync) {
+            if (sSystem == null) {
                 AssetManager system = new AssetManager(true);
                 system.makeStringBlocks(false);
-                mSystem = system;
+                sSystem = system;
             }
         }
     }
@@ -111,14 +110,14 @@
      */
     public static AssetManager getSystem() {
         ensureSystemAssets();
-        return mSystem;
+        return sSystem;
     }
 
     /**
      * Close this asset manager.
      */
     public void close() {
-        synchronized(mSync) {
+        synchronized(this) {
             //System.out.println("Release: num=" + mNumRefs
             //                   + ", released=" + mReleased);
             if (mOpen) {
@@ -133,7 +132,7 @@
      * identifier for the current configuration / skin.
      */
     /*package*/ final CharSequence getResourceText(int ident) {
-        synchronized (mSync) {
+        synchronized (this) {
             TypedValue tmpValue = mValue;
             int block = loadResourceValue(ident, tmpValue, true);
             if (block >= 0) {
@@ -151,7 +150,7 @@
      * identifier for the current configuration / skin.
      */
     /*package*/ final CharSequence getResourceBagText(int ident, int bagEntryId) {
-        synchronized (mSync) {
+        synchronized (this) {
             TypedValue tmpValue = mValue;
             int block = loadResourceBagValue(ident, bagEntryId, tmpValue, true);
             if (block >= 0) {
@@ -229,7 +228,7 @@
 
     /*package*/ final void ensureStringBlocks() {
         if (mStringBlocks == null) {
-            synchronized (mSync) {
+            synchronized (this) {
                 if (mStringBlocks == null) {
                     makeStringBlocks(true);
                 }
@@ -238,14 +237,14 @@
     }
 
     private final void makeStringBlocks(boolean copyFromSystem) {
-        final int sysNum = copyFromSystem ? mSystem.mStringBlocks.length : 0;
+        final int sysNum = copyFromSystem ? sSystem.mStringBlocks.length : 0;
         final int num = getStringBlockCount();
         mStringBlocks = new StringBlock[num];
         if (localLOGV) Log.v(TAG, "Making string blocks for " + this
                 + ": " + num);
         for (int i=0; i<num; i++) {
             if (i < sysNum) {
-                mStringBlocks[i] = mSystem.mStringBlocks[i];
+                mStringBlocks[i] = sSystem.mStringBlocks[i];
             } else {
                 mStringBlocks[i] = new StringBlock(getNativeStringBlock(i), true);
             }
@@ -293,7 +292,7 @@
      */
     public final InputStream open(String fileName, int accessMode)
         throws IOException {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -308,7 +307,7 @@
 
     public final AssetFileDescriptor openFd(String fileName)
             throws IOException {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -384,7 +383,7 @@
      */
     public final InputStream openNonAsset(int cookie, String fileName, int accessMode)
         throws IOException {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -404,7 +403,7 @@
     
     public final AssetFileDescriptor openNonAssetFd(int cookie,
             String fileName) throws IOException {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -463,7 +462,7 @@
      */
     /*package*/ final XmlBlock openXmlBlockAsset(int cookie, String fileName)
         throws IOException {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -477,13 +476,13 @@
     }
 
     /*package*/ void xmlBlockGone() {
-        synchronized (mSync) {
+        synchronized (this) {
             decRefsLocked();
         }
     }
 
     /*package*/ final int createTheme() {
-        synchronized (mSync) {
+        synchronized (this) {
             if (!mOpen) {
                 throw new RuntimeException("Assetmanager has been closed");
             }
@@ -493,7 +492,7 @@
     }
 
     /*package*/ final void releaseTheme(int theme) {
-        synchronized (mSync) {
+        synchronized (this) {
             deleteTheme(theme);
             decRefsLocked();
         }
@@ -523,7 +522,7 @@
             return len > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)len;
         }
         public final void close() throws IOException {
-            synchronized (AssetManager.mSync) {
+            synchronized (AssetManager.this) {
                 if (mAsset != 0) {
                     destroyAsset(mAsset);
                     mAsset = 0;