summaryrefslogtreecommitdiff
path: root/libs/androidfw/AssetManager.cpp
diff options
context:
space:
mode:
authorsongjinshi <songjinshi@xiaomi.com>2016-10-06 20:13:00 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-10-06 20:13:00 +0000
commit09901f3bc90600513cdd7d7d15ae6fe43a1b332c (patch)
treebb6eee996a4878a87303784929979214e9c310a5 /libs/androidfw/AssetManager.cpp
parentc9956e2ea8007c23c0e51887783d04f5e9352128 (diff)
parent5754b41c201a388e4e932b18d285d765d7e63536 (diff)
Fix thread race caused double free issue.
am: 5754b41c20 Change-Id: Ic9dd6e9c6d216753d997da99158816682d5464d1
Diffstat (limited to 'libs/androidfw/AssetManager.cpp')
-rw-r--r--libs/androidfw/AssetManager.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp
index daf35921b13d..043989874bc8 100644
--- a/libs/androidfw/AssetManager.cpp
+++ b/libs/androidfw/AssetManager.cpp
@@ -1893,6 +1893,7 @@ ZipFileRO* AssetManager::SharedZip::getZip()
Asset* AssetManager::SharedZip::getResourceTableAsset()
{
+ AutoMutex _l(gLock);
ALOGV("Getting from SharedZip %p resource asset %p\n", this, mResourceTableAsset);
return mResourceTableAsset;
}
@@ -1902,10 +1903,10 @@ Asset* AssetManager::SharedZip::setResourceTableAsset(Asset* asset)
{
AutoMutex _l(gLock);
if (mResourceTableAsset == NULL) {
- mResourceTableAsset = asset;
// This is not thread safe the first time it is called, so
// do it here with the global lock held.
asset->getBuffer(true);
+ mResourceTableAsset = asset;
return asset;
}
}