summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/GalleryAppImpl.java
diff options
context:
space:
mode:
authorRay Chen <raychen@google.com>2012-04-20 10:58:20 +0800
committerRay Chen <raychen@google.com>2012-04-20 11:43:12 +0800
commitf9a5a456aa75949c1065656ba01ab2ca350de7e9 (patch)
treeda862afa49b68495b1b6f9e8b498c25bb17b16db /src/com/android/gallery3d/app/GalleryAppImpl.java
parent0f4f00b1c311527f31afa2d7a481b46675aeb14e (diff)
downloadandroid_packages_apps_Snap-f9a5a456aa75949c1065656ba01ab2ca350de7e9.tar.gz
android_packages_apps_Snap-f9a5a456aa75949c1065656ba01ab2ca350de7e9.tar.bz2
android_packages_apps_Snap-f9a5a456aa75949c1065656ba01ab2ca350de7e9.zip
Fix 6208468 21 ANR(s) in: com.google.android.gallery3d on crespo during monkey runs for JRM80
b:6208468 Both getDataManager and getImageCacheService use the same lock but the latter method is blocked on RandomAccessFile's open syscall. The lock should be separated because they're independent and getDataManager is very frequently used too. Change-Id: I4d44cfc949f45a31c7200c8327115bc4b7fde60f
Diffstat (limited to 'src/com/android/gallery3d/app/GalleryAppImpl.java')
-rw-r--r--src/com/android/gallery3d/app/GalleryAppImpl.java12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/app/GalleryAppImpl.java b/src/com/android/gallery3d/app/GalleryAppImpl.java
index ac551dd95..852926bc7 100644
--- a/src/com/android/gallery3d/app/GalleryAppImpl.java
+++ b/src/com/android/gallery3d/app/GalleryAppImpl.java
@@ -35,6 +35,7 @@ public class GalleryAppImpl extends Application implements GalleryApp {
private static final long DOWNLOAD_CAPACITY = 64 * 1024 * 1024; // 64M
private ImageCacheService mImageCacheService;
+ private Object mLock = new Object();
private DataManager mDataManager;
private ThreadPool mThreadPool;
private DownloadCache mDownloadCache;
@@ -60,11 +61,14 @@ public class GalleryAppImpl extends Application implements GalleryApp {
return mDataManager;
}
- public synchronized ImageCacheService getImageCacheService() {
- if (mImageCacheService == null) {
- mImageCacheService = new ImageCacheService(getAndroidContext());
+ public ImageCacheService getImageCacheService() {
+ // This method may block on file I/O so a dedicated lock is needed here.
+ synchronized (mLock) {
+ if (mImageCacheService == null) {
+ mImageCacheService = new ImageCacheService(getAndroidContext());
+ }
+ return mImageCacheService;
}
- return mImageCacheService;
}
public synchronized ThreadPool getThreadPool() {