diff options
-rw-r--r-- | core/java/android/content/res/AssetManager.java | 5 | ||||
-rw-r--r-- | core/java/android/content/res/StringBlock.java | 3 | ||||
-rw-r--r-- | core/java/android/content/res/XmlBlock.java | 4 |
3 files changed, 10 insertions, 2 deletions
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index ef3842aeb348..0f284f491c29 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -528,6 +528,10 @@ public final class AssetManager implements AutoCloseable { if (!mOpen) { throw new RuntimeException("AssetManager has been closed"); } + // Let's still check if the native object exists, given all the memory corruptions. + if (mObject == 0) { + throw new RuntimeException("AssetManager is open but the native object is gone"); + } } /** @@ -1153,6 +1157,7 @@ public final class AssetManager implements AutoCloseable { int[] getAttributeResolutionStack(long themePtr, @AttrRes int defStyleAttr, @StyleRes int defStyleRes, @StyleRes int xmlStyle) { synchronized (this) { + ensureValidLocked(); return nativeAttributeResolutionStack( mObject, themePtr, xmlStyle, defStyleAttr, defStyleRes); } diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java index 6c0735692db9..c143acb34c5f 100644 --- a/core/java/android/content/res/StringBlock.java +++ b/core/java/android/content/res/StringBlock.java @@ -62,7 +62,7 @@ public final class StringBlock implements Closeable { private static final String TAG = "AssetManager"; private static final boolean localLOGV = false; - private final long mNative; + private long mNative; // final, but gets modified when closed private final boolean mUseSparse; private final boolean mOwnsNative; @@ -207,6 +207,7 @@ public final class StringBlock implements Closeable { if (mOwnsNative) { nativeDestroy(mNative); } + mNative = 0; } } } diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java index 3915a6ccb46d..16fd1f7277a7 100644 --- a/core/java/android/content/res/XmlBlock.java +++ b/core/java/android/content/res/XmlBlock.java @@ -73,7 +73,9 @@ public final class XmlBlock implements AutoCloseable { private void decOpenCountLocked() { mOpenCount--; if (mOpenCount == 0) { + mStrings.close(); nativeDestroy(mNative); + mNative = 0; if (mAssets != null) { mAssets.xmlBlockGone(hashCode()); } @@ -621,7 +623,7 @@ public final class XmlBlock implements AutoCloseable { } private @Nullable final AssetManager mAssets; - private final long mNative; + private long mNative; // final, but gets reset on close /*package*/ final StringBlock mStrings; private boolean mOpen = true; private int mOpenCount = 1; |