summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2011-03-15 11:37:32 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-03-15 11:37:32 -0700
commita74887e87c720fd100f10b2e69a027c493036e20 (patch)
tree57ff3bf37be4eb010e2e9cff615a6905dbbe1448 /telephony
parent9ac9b28576834b69561a48a4050e7ad027543bcd (diff)
parent56c4c442c0309aa91958dee6b6ed2d65db7ba17d (diff)
downloadframeworks_base-a74887e87c720fd100f10b2e69a027c493036e20.zip
frameworks_base-a74887e87c720fd100f10b2e69a027c493036e20.tar.gz
frameworks_base-a74887e87c720fd100f10b2e69a027c493036e20.tar.bz2
am 56c4c442: Merge "Lazy initialization must be synchronized to avoid parallel instances cretation."
* commit '56c4c442c0309aa91958dee6b6ed2d65db7ba17d': Lazy initialization must be synchronized to avoid parallel instances cretation.
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CatService.java40
1 files changed, 22 insertions, 18 deletions
diff --git a/telephony/java/com/android/internal/telephony/cat/CatService.java b/telephony/java/com/android/internal/telephony/cat/CatService.java
index 1e23e34..36059ad 100644
--- a/telephony/java/com/android/internal/telephony/cat/CatService.java
+++ b/telephony/java/com/android/internal/telephony/cat/CatService.java
@@ -118,6 +118,8 @@ public class CatService extends Handler implements AppInterface {
private static IccRecords mIccRecords;
// Service members.
+ // Protects singleton instance lazy initialization.
+ private static final Object sInstanceLock = new Object();
private static CatService sInstance;
private CommandsInterface mCmdIf;
private Context mContext;
@@ -515,26 +517,28 @@ public class CatService extends Handler implements AppInterface {
*/
public static CatService getInstance(CommandsInterface ci, IccRecords ir,
Context context, IccFileHandler fh, IccCard ic) {
- if (sInstance == null) {
- if (ci == null || ir == null || context == null || fh == null
- || ic == null) {
- return null;
+ synchronized (sInstanceLock) {
+ if (sInstance == null) {
+ if (ci == null || ir == null || context == null || fh == null
+ || ic == null) {
+ return null;
+ }
+ HandlerThread thread = new HandlerThread("Cat Telephony service");
+ thread.start();
+ sInstance = new CatService(ci, ir, context, fh, ic);
+ CatLog.d(sInstance, "NEW sInstance");
+ } else if ((ir != null) && (mIccRecords != ir)) {
+ CatLog.d(sInstance, "Reinitialize the Service with SIMRecords");
+ mIccRecords = ir;
+
+ // re-Register for SIM ready event.
+ mIccRecords.registerForRecordsLoaded(sInstance, MSG_ID_ICC_RECORDS_LOADED, null);
+ CatLog.d(sInstance, "sr changed reinitialize and return current sInstance");
+ } else {
+ CatLog.d(sInstance, "Return current sInstance");
}
- HandlerThread thread = new HandlerThread("Cat Telephony service");
- thread.start();
- sInstance = new CatService(ci, ir, context, fh, ic);
- CatLog.d(sInstance, "NEW sInstance");
- } else if ((ir != null) && (mIccRecords != ir)) {
- CatLog.d(sInstance, "Reinitialize the Service with SIMRecords");
- mIccRecords = ir;
-
- // re-Register for SIM ready event.
- mIccRecords.registerForRecordsLoaded(sInstance, MSG_ID_ICC_RECORDS_LOADED, null);
- CatLog.d(sInstance, "sr changed reinitialize and return current sInstance");
- } else {
- CatLog.d(sInstance, "Return current sInstance");
+ return sInstance;
}
- return sInstance;
}
/**